一篇文章让你快速学会linux内核文件的编译

如何进行Linux内核的编译过程 

(1)先确认Makefile 1.1、主要确认检查交叉编译工具链 1.2、确认arch == arm:确认我们的架构是否为arm体系架构。 主要目的是为了编译时能够找到arch/arm目录。

PS? 你在工作的时候,是否有时候会觉得很奇怪,为什么人家说在别人的电脑上面编译时没有问题的,但是在你的电脑一用就是各种问题。 (当然你从事单片机开发,这样的问题会少很多,因为IDE已经帮助你干了很多事情了,所以单片机开发能够专心的干自己开发的事情) 其实这样的事情,很多时候,都是因为你的电脑和Makefile没有形成一个“沟通”,你Makefile想用的是4412的gcc,然后他就直接用2440的gcc帮你编译了,所以就出现一大堆的问题出来。

(2)手工配置:make x210iiqt_defconfig 最后需要出现这么一句话:configuration written to .config 就证明我们的操作是正确的,如果没有出现这句话的话,那么就是错误的。

为什么我们需要手工配置这句话: 我可以保证的是,当你从一个方案商或者供应商中得到东西的时候,应该已经有原厂的人,帮你配置好了绝大部分的东西了,可能有时候你的公司,说我不用三星的触摸屏,我要用某某的台湾的,为啥,因为便宜啊,所以这时候,你做完这部分之后,你还要进行下一步,就是改动驱动,这里就不用改了。进入下一部分,图形化配置(可能有大牛觉得说错了,是的,因为很多时候也需要改动Kconfig文件)。

这里就是为什么嵌入式的Linux开发比别的单片机开发难的地方,单片机一个IDE帮助你解决99%的问题。

(3)第三步:make menuconfig:进行图形化配置。 很多时候,如果我们的硬件跟开发板是一样的话,我们就不需要进行这一步了,因为你硬件没有改动,直接沿用上面的手工配置文件即可make.

一般如果你用的电脑啥都没有的话: 需要安装图形文件化库: apt-get install libncurses5-dev

2、Linux内核源码树目录

2.1、initrd.img.cpio这个东西是跟设备树的传参是有关系的,你也可以把这个东西删除。

2.2、Kbuild,Kbuild是kernel build:就是内核编译的意思,这个文件就是Linux内核编译体系需要用到的文件。

2.3、MAINTAINERS:内核的维护者,各路大神

2.4、Makefile:这个是Linux内核的总Makefile的管理

2.5、mk,是九鼎公司在移植的自己添加的,不是Linux内核本身的东西,九鼎添加这个文件的作用就是用这个文件来整体管理kernel目录的配置和编译。可能直接source mk,就完成整个编译的过程。

2.6、README:简述Linux内核是个什么鬼

2.7、REPORTING-BUGS:上报BUG,里面没有关系的

Linux内核源码树的文件夹的作用 3.1、(arch),arch是architecture的缩写,意思就是架构,arch目录下面是好多个不同的CPU的子目录,比如arm这种CPU的所有文件都在arch/arm。

3.2、block,英文是块的意思:在Linux内核中block表示块设备,块就是多个字节组成的整体,类似于扇区,为单位的整体访问,比如说我们的SD卡,inand,硬盘和块设备,。

3.3、crypto:这个文件夹应该是加密相关的,这些东西就是一些加密的算法,这个目录下放了一些各种常见加密算法的C语言代码实现了,比如crc32,md5,shal等。

3.4、documentation:里面放了一些文档,内核的特点。

3.5、drivers:驱动目录,里面分门别类的列出了Linux内核支持的所有的硬件设备: char:就是我们的字符设备驱动 hid:人机交互的部分。

3.6、firmware:固件,什么是固件,固件其实就是软件,不过这个软件是固话到我们的CPU里面运行的叫做固件,就像S5PV210的IROM代码。

3.7、fs:就是filesystem,文件系统,里面列出Linux系统中的常用的文件系统。

3.8、includes:头文件目录,公共的头文件都在这里面。每种CPU里面的特有的架构在arch/arm/include 这里面存放的就是CPU的架构里面特有的文件夹及其文件夹子目录。

3.9、init:就是初始化的意思,这个目录下面的代码就是Linux内核启动时初始化内核的代码、

3.10、IPC,进程间通信,里面都是Linux支持的IPC的代码

3.11、kernel:kernel就是内核,就是Linux内核,所以这个文件夹是Linux本身的kernel,利用内核干活的人,所以这个文件夹放的就是内核本身需要的一些代码文件。

3.12、lib:lib是库的意思,这里面都是一些公用的有用的库函数,注意这里面的库函数,和C语言的库函数的不一样的,在内核编程中是不能用C语言标准库函数。

3.13、mm,mm是memory management,内存管理,Linux的内存管理的diamante

3.14、net:网络:该目录下是网络相关的代码,比如TCP、IP协议栈。

3.15、scripts:脚本:shell编程,这个目录下面放的全部都是脚本文件。 这些脚本文件不是Linux内核工作时使用的。而是用来辅助对Linux内核 配置的支持文件。可以配置也可以编译

我们并不会详细的分析这个目录下的脚本,而是通过外围来重点学会配置 和编译Linux内核即可。

3.16、security:这是一些安全相关的代码,不用去管他。

3.17、sound:音频处理相关的。

3.18、tools:Linux中用到的一些有用的工具。

3.19、usr:目录下initramfs:相关的,和Linux内核的启动有关的,暂时不用去管。

3.20、virt:就是内核虚拟机的意思,暂时不用管。

总结:这么多目录跟我们关系紧密的就是arch,drivers,然后就是include block,mm,net,lib等目录。

猜你喜欢

转载自blog.csdn.net/m0_63790530/article/details/121217697