移值linux(基于官方的板子的linux内核)
移值内核还是比较简单的,直接在官方开发板上面的内核上面进行修改,添加自己的文件即可:
- 首先是配置文件 XXXdefconfig 这个文件(在arch/arm/configs里面),复制一份配置文件,然后同理复制一份XXXdts文件(在arch/arm/boot/dts里面)
- 然后就直接使用命令进行对内核程序的配置
make deconfig
make menuconfig #上面两步都是进行配置操作,最终生成.config文件,内核会读取这个配置文件,然后对内核进行有选择的编译--->实现了内核的裁剪
make -j16
- 内核首先会编译生成vmlinux,这个文件是 ELF 格式的文件,经过取消一些多余信息,比如符号表等,成了Image 然后经过压缩成了zimage(相比于uImage,zImage头部添加了镜像的信息:文件的类型,加载的位置,大小与生成时间等等)
- 内核启动:首先
①关闭MMU。
②关闭D-cache。
③I-Cache 无所谓。
④r0=0。
⑤r1=machine nr(也就是机器ID)。
⑥r2=atags 或者设备树(dtb)首地址。
Linux 内核的入口点 stext 其实相当于内核的入口函数,stext 函数内容如下
然后会调用start_kernel 函数,完成Linux的初始化工作:定时器、中断,slab分配器。
然后调用rest_init()函数,创建init进程与kthread进程:init就是pid为1的进程,是所有进程的父进程,kthread是内核进程,负责内核的线程管理,fflush缓存刷新线程就是一个内核线程。