一、Linux内核来源
1、官网www.kernel.org.com
官网提供各个版本的Linux内核,可以下载一个版本的Linux内核,根据自己的需求对内核进行修改,但是难度很大,一般不推荐。
2、SOC厂商提供的Liunx内核
SOC厂商也是从官网下载一个版本的Linux内核,根据自己的情况对这个版本的Linux内核进行修改,并且自己维护,一般推荐使用SOC厂商提供的Linux内核在根据自己的开发板进行编译和修改。
3、开发板厂商提供的Linux内核
开发板厂商从SOC厂商获取到SOC自己修改后的Linux内核,根据自己开发板的情况对其再次修改。
二、正点原子提供的Linux内核编译
1、对Linux内核进行解压

2、创建shell脚本,对Linux内核进行编译
#!bin/sh
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- imx_v7_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all -j12
distclean:清理工程。
imx_v7_defconfig:配置工程。
menuconfig:打开图形配置界面,对Linux进行配置,图形配置后要进行保存,不然再次编译后清理工程会把你配置好的图形配置给清除掉

按两次esc退出图形化配置界面。
all:编译所有文件。
注:编译内核之前需要先在 ubuntu 上安装 lzop 库,否则内核编译会失败!
sudo apt-get install lzop
修改的dtc-parser.tab.c 文件在编译过程中被还原,修改后的部分又被变回原来的。所以编译出错。

找到文件这两个文件将YYLTYPE yylloc 外部申明


再次编译,编译完成以后就会在 arch/arm/boot 这个目录下生成一个叫做 zImage 的文件, zImage 就是我们要用的 Linux 镜像文件。另外也会在 arch/arm/boot/dts 下生成很多.dtb 文件,这些.dtb 就是设备树文件。我们需要的设备数文件是imx6ull-14x14-emmc-7-1024x600-c.dtb


三、使用网络将zImage和设备树下载到开发板验证
1、将zImage和需要的设备树文件拷贝到tftp文件夹下


2、serialCRT中Uoot命令下载zImage和设备数


3、启动Linux内核

内核启动成功,屏幕出现正点原子的loge。说明Linux内核的移植成功。
四、Linux内核文件分析


1、 arch 目录
这个目录是和架构有关的目录,比如 arm、 arm64、avr32、 x8等等架构。每种架构都对应一个目录。
2、block 目录
block 是 Linux 下块设备目录,像 SD 卡、 EMMC、 NAND、硬盘等存储设备就属于块设备,block 目录中存放着管理块设备的相关文件。
3、crypto 目录
crypto 目录里面存放着加密文件,比如常见的 crc、 crc32、 md4、 md5、 hash 等加密算法。
4、 Documentation 目录
此目录里面存放着 Linux 相关的文档,如果要想了解 Linux 某个功能模块或驱动架构的功
能,就可以在 Documentation 目录中查找有没有对应的文档。
5、 drivers 目录
驱动目录文件,此目录根据驱动类型的不同,分门别类进行整理,比如 drivers/i2c 就是 I2C
相关驱动目录, drivers/gpio 就是 GPIO 相关的驱动目录,这是我们学习的重点。
6、 firmware 目录
此目录用于存放固件。
7、 fs 目录
此目录存放文件系统,比如 fs/ext2、 fs/ext4、 fs/f2fs 等,分别是 ext2、 ext4 和 f2fs 等文件系统。
8、include 目录
头文件目录
9、 init 目录
此目录存放 Linux 内核启动的时候初始化代码。
10、 ipc 目录
IPC 为进程间通信, ipc 目录是进程间通信的具体实现代码。
11、 kernel 目录
Linux 内核代码。
12、 lib 目录
lib 是库的意思, lib 目录都是一些公用的库函。
13、 mm 目录
此目录存放内存管理相关代码。
14、 net 目录
此目录存放网络相关代码。
15、 samples 目录
此目录存放一些示例代码文件。
16、 scripts 目录
脚本目录, Linux 编译的时候会用到很多脚本文件,这些脚本文件就保存在此目录中。
17、 security 目录
此目录存放安全相关的文件。
18、 sound 目录
此目录存放音频相关驱动文件,音频驱动文件并没有存放到 drivers 目录中,而是单独的目
录。
19、 tools 目录
此目录存放一些编译的时候使用到的工具。
20、 usr 目录
此目录存放与 initramfs 有关的代码。
21、 virt 目录
此目录存放虚拟机相关文件。
22、 .config 文件
跟 uboot 一样, .config 保存着 Linux 最终的配置信息,编译 Linux 的时候会读取此文件中
的配置信息。最终根据配置信息来选择编译 Linux 哪些模块,哪些功能。
23、 Kbuild 文件
有些 Makefile 会读取此文件。
24、 Kconfig 文件
图形化配置文件。
25、Makefile文件
Linux 顶层 Makefile 文件,建议好好阅读一下此文件。
26、 README 文件
此文件详细讲解了如何编译 Linux 源码,以及 Linux 源码的目录信息,建议仔细阅读一下
此文件。
848

被折叠的 条评论
为什么被折叠?



