嵌入式linux内核编译,启动
1、编译步骤
1、生成配置文件 .config
2、make
3、在arch/arm/boot/下得到内核的镜像文件;
1.1生成配置文件的方式
1、如果你是使用第三方修改过的内核源码,那么一般在arch/arm/configs目录下面有很多基于不同开发板的配置文件,将你需要的配置文件拷贝到内核源码根目录即可;
2、对于没有提供有现成配置文件的源码,一般使用图形化界面进行配置(执行make menuconfig),生成**.config**文件;使用这种配置时,除开编译选项的配置外,值得注意的是编译工具的指定及内核启动参数的指定。
到这里我们只是做到了知其然,而知其所以然,则涉及到Kconfig文件,关于Kconfig文件如何得到配置的界面选项参考文章:
https://www.cnblogs.com/jiangzhaowei/p/7528099.html
交叉编译工具配置
在generl setup子目录cross-compile tool prefix指定你要使用交叉编译工具的目录即可
内核启动参数
在boot option子目录,Default kernel command string里指定 你要使用的内核启动参数即可;
1.2 编译得到内核镜像
这里我们要注意到的是,一般嵌入式linux都是使用uboot的,这样使得我们只关心uImage,关于编译得到的内核镜像的区别参考文章:
https://blog.csdn.net/yi412/article/details/19131549
得到uImage的方法为在编译时指定uImage格式:make uImage
1.3 生成的镜像文件目录
得到的镜像文件目录为arch/arm/boot
2、内核启动流程
uboot将内核镜像加载到内存后,则开始执行内核,最先开始执行board_init初始化,即设置时钟,初始化i-cache;简而言之,就是设置板子,初始化C代码执行环境。在内核启动的最末尾,根据内核启动参数,挂载根文件系统。由内核启文件系统下的/sbin/init程序;完成由内核态到用户空间的转换。