网站建设论文结尾,怎么做关注网站,百度广告代运营公司,哪有个人免费云服务器目录Linux 内核获取Linux 内核初次编译Linux 内核源码目录分析1、arch 目录2、block 目录3、crypto 目录4、Documentation 目录5、drivers 目录6、firmware 目录7、fs 目录8、include 目录9、init 目录10、ipc 目录11、kernel 目录12、lib 目录13、mm 目录Linux 内核获取 关于L…
目录Linux 内核获取Linux 内核初次编译Linux 内核源码目录分析1、arch 目录2、block 目录3、crypto 目录4、Documentation 目录5、drivers 目录6、firmware 目录7、fs 目录8、include 目录9、init 目录10、ipc 目录11、kernel 目录12、lib 目录13、mm 目录Linux 内核获取 关于Linux 的起源以及发展历史这里就不啰嗦了网上相关的介绍太多了即使写到这也只是水一下教程页数而已没有任何实际的意义。有限的时间还是放到有意义的事情上吧Linux 由Linux 基金会管理与发布Linux 官网为https://www.kernel.org所以你想获取最新的Linux 版本就可以在这个网站上下载网站界面如图35.1.1 所示 从图35.1.1 可以看出最新的稳定版Linux 已经到了5.1.4大家没必要追新因为4.x 版本的Linux 和5.x 版本没有本质上的区别5.x 更多的是加入了一些新的平台、新的外设驱动而已。
NXP 会从https://www.kernel.org 下载某个版本的Linux 内核然后将其移植到自己的CPU上测试成功以后就会将其开放给NXP 的CPU 开发者。开发者下载NXP 提供的Linux 内核然后将其移植到自己的产品上。本章的移植我们就使用NXP 提供的Linux 源码NXP 提供Linux源码已经放到了开发板光盘中路径为开发板光盘-1、例程源码-4、NXP 官方原版Uboot和Linux- linux-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2
Linux 内核初次编译
编译内核之前需要先在ubuntu 上安装lzop 库否则内核编译会失败命令如下
sudo apt-get install lzop先看一下如何编译Linux 源码这里编译以I.MX6U-ALPHA 开发板移植好的Linux 源码已经放到了开发板光盘中路径为开发板光盘-1、例程源码- 3、正点原子Uboot 和Linux出厂源码- linux-imx-4.1.15-2.1.0-g8a006db.tar.bz2注意正点原子出厂系统在不断的更新因此内和压缩包的名字可能不同一切以实际为准
在Ubuntu 中新建名为“alientek_linux ”的文件夹然后将linux-imx-4.1.15-2.1.0-g8a006db.tar.bz2 这个压缩包拷贝到前面新建的alientek_linux 文件夹中并解压命令如下
tar -vxjf linux-imx-4.1.15-2.1.0-g8a006db.tar.bz2解压完成以后的Linux 源码根目录如图35.2.1 所示 以EMMC 核心板为例讲解一下如何编译出对应的Linux 镜像文件。新建名为“mx6ull_alientek_emmc.sh”的shell 脚本然后在这个shell 脚本里面输入如下所示内容
示例代码35.2.1 mx6ull_alientek_emmc.sh 文件内容
#!/bin/sh
make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- distclean
make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- imx_v7_defconfig
make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- menuconfig
make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- all -j16第3 行执行“make distclean”清理工程所以mx6ull_alientek_emmc.sh 每次都会清理一下工程。如果通过图形界面配置了Linux但是还没保存新的配置文件那么就要慎重使用mx6ull_alientek_emmc.sh 编译脚本了因为它会把你的配置信息都删除掉 第4 行执行“make xxx_defconfig”配置工程。 第5 行执行“make menuconfig”打开图形配置界面对Linux 进行配置如果不想每次编译都打开图形配置界面的话可以将这一行删除掉。 第6 行执行“make”编译Linux 源码。 可以看出Linux 的编译过程基本和uboot 一样都要先执行“make xxx_defconfig”来配置一下然后在执行“make”进行编译。如果需要使用图形界面配置的话就执行“make menuconfig”。 使用chmod 给予mx6ull_alientek_emmc.sh 可执行权限然后运行此shell 脚本命令如下
./mx6ull_alientek_emmc.sh编译的时候会弹出Linux 图形配置界面如图35.2.3 所示 Linux 的图行界面配置和uboot 是一样的这里我们不需要做任何的配置直接按两下ESC键退出退出图形界面以后会自动开始编译Linux。等待编译完成完成以后如图35.2.4 所示 编译完成以后就会在arch/arm/boot 这个目录下生成一个叫做zImage 的文件zImage 就是我们要用的Linux 镜像文件。另外也会在arch/arm/boot/dts 下生成很多.dtb 文件这些.dtb 就是设备树文件。
Linux 内核源码目录分析
将正点原子提供的Linux 源码进行解压解压完成以后的目录如图35.3.1 所示 图35.3.1 就是正点原子提供的未编译的Linux 源码目录文件我们在分析Linux 之前一定要先在Ubuntu 中编译一下Linux因为编译过程会生成一些文件而生成的这些恰恰是分析Linux 不可或缺的文件。编译完成以后使用tar 压缩命令对其进行压缩并使用Filezilla 软件将压缩后的uboot 源码拷贝到Windows 下。
编译后的Linux 目录如图35.3.2 所示 表35.3.1 中的很多文件夹和文件我们都不需要去关心我们要关注的文件夹或文件如下
1、arch 目录
这个目录是和架构有关的目录比如arm、arm64、avr32、x86 等等架构。每种架构都对应一个目录在这些目录中又有很多子目录比如boot、common、configs 等等以arch/arm 为例其子目录如图35.3.2 所示 图35.3.2 是arch/arm 的一部分子目录这些子目录用于控制系统引导、系统调用、动态调频、主频设置等。arch/arm/configs 目录是不同平台的默认配置文件xxx_defconfig如图35.3.3所示 在arch/arm/configs 中就包含有I.MX6U-ALPHA 开发板的默认配置文件imx_v7_defconfig,执行“make imx_v7_defconfig”即可完成配置。arch/arm/boot/dts 目录里面是对应开发平台的设备树文件正点原子I.MX6U-ALPHA 开发板对应的设备树文件如图35.3.4 所示 arch/arm/boot 目录下会保存编译出来的Image 和zImage 镜像文件而zImage 就是我们要用的linux 镜像文件。
arch/arm/mach-xxx 目录分别为相应平台的驱动和初始化文件比如mach-imx 目录里面就是I.MX 系列CPU 的驱动和初始化文件。
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 源码的目录信息建议仔细阅读一下此文件。