1、如何进行Linux内核的编译过程
(1)先确认Makefile1.1、主要确认检测交叉编译工具链1.2、确认arch==arm:确认我们的构架是否为arm体系构架。主要目的是为了编译时才能找到arch/arm目录。
PS?你在工作的时侯,是否有时侯会感觉很奇怪,为何人家说在他人的笔记本里面编译时没有问题的,并且在你的笔记本一用就是各类问题。(其实你从事单片机开发,这样的问题会少好多,由于IDE早已帮助你干了好多事情了,所以单片机开发就能专心的干自己开发的事情)虽然这样的事情,好多时侯,都是由于你的笔记本和Makefile没有产生一个“沟通”,你Makefile想用的是4412的gcc,之后他就直接用2440的gcc帮你编译了linux内核完全剖析pdf,所以就出现一大堆的问题下来。
(2)手工配置:makex210iiqt_defconfig最后须要出现如此一句话:configurationwrittento.config就证明我们的操作是正确的,假如没有出现这句话的话,这么就是错误的。
为何我们须要手工配置这句话:我可以保证的是,当你从一个方案商或则供应商中得到东西的时侯,应当早已有原厂的人,帮你配置好了绝大部份的东西了,可能有时侯你的公司,说我不用三星的触摸屏,我要用某甲的日本的,为什么,由于实惠啊,所以这时侯,你做完这部份以后,你还要进行下一步,就是改动驱动,这里就不用改了。步入下一部份,图形化配置(可能有大牛认为说错了,是的,由于好多时侯也须要改动Kconfig文件)。
这儿就是为何嵌入式的Linux开发比别的单片机开发难的地方,单片机一个IDE帮助你解决99%的问题。
(3)第三步:makemenuconfig:进行图形化配置。好多时侯,假如我们的硬件跟开发板是一样的话,我们就不须要进行这一步了,由于你硬件没有改动,直接承袭里面的手工配置文件即可make.
通常假如你用的笔记本啥都没有的话:须要安装图形文件化库:apt-getinstalllibncurses5-dev
2、Linux内核源码树目录
2.1、initrd.img.cpio这个东西是跟设备树的传参是有关系的,你也可以把这个东西删掉。
2.2、Kbuild,Kbuild是kernelbuild:就是内核编译的意思,这个文件就是Linux内核编译体系须要用到的文件。
2.3、MAINTAINERS:内核的维护者,各路高手
2.4、Makefile:这个是Linux内核的总Makefile的管理
2.5、mk,是九鼎公司在移植的自己添加的,不是Linux内核本身的东西,九鼎添加这个文件的作用就是用这个文件来整体管理kernel目录的配置和编译。可能直接sourcemk,就完成整个编译的过程。
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上面运行的称作固件红帽linux系统下载,如同S55PVPV210的IROM代码。
3.7、fs:就是filesystem,文件系统,上面列举Linux系统中的常用的文件系统。
3.8、includes:头文件目录,公共的头文件都在这儿面。每种CPU上面的特有的构架在arch/arm/include这儿面储存的就是CPU的构架上面特有的文件夹及其文件夹子目录。
3.9、init:就是初始化的意思,这个目录下边的代码就是Linux内核启动时初始化内核的代码、
3.10、IPC,进程间通讯linux内核完全剖析pdf,上面都是Linux支持的IPC的代码
3.11、kernel:kernel就是内核,就是Linux内核,所以这个文件夹是Linux本身的kernel,借助内核干活的人,所以这个文件夹放的就是内核本身须要的一些代码文件。
3.12、lib:lib是库的意思,这儿面都是一些公用的有用的库函数,注意这儿面的库函数,和C语言的库函数的不一样的,在内核编程中是不能用C语言标准库函数。
3.13、mm,mm是memorymanagement,显存管理,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命令详解词典,和Linux内核的启动有关的,暂时不用去管。
3.20、virt:就是内核虚拟机的意思,暂时不用管。
总结:那么多目录跟我们关系紧密的就是arch,drivers,之后就是includeblock,mm,net,lib等目录。