Linux内核是什么?
内核可以简单的理解为许多模块化代码的堆积,通过有机的联系构成一个系统。你可以删除内核模块或增加自己的写的功能模块,这样就达到了裁剪系统的操作。
裁剪一个属于自己的系统分为几步?
分为以下三步:
第一步:制作uboot
需要准备的资料:源码包 (官网提供,如友善之臂的4412,对应uboot_tiny4412-sdk1506.tar.bz2)
SD卡 (需要大的那种,因为接口是MMC)
Securecrt工具 (工具,用于与开发平台通讯,COM转USB连接)
SD-Flasher (工具,制作烧写用SD卡)
交叉编译器(开发板指定,一般为arm-linux-****)
制作过程描述:解压源码包,make生成bl1.bin 、bl2.bin 、uboot.bin,执行脚本sd_fusing.sh将其写入SD卡
(此时,可以在开发板上运行uboot,类似于bios,可以通过SecureCRT进行简单的命令操作,help查看所有命令)
第二步:裁剪内核源码
需要准备的资料:内核源码包 (开源代码,网上可以找到,如linux-3.5.buildok.tar.gz)
制作过程:解压源码包,通过make menuconfig 的配置菜单实现裁剪,然后make生成zImage,最后创建并编写烧入脚本sd_fusing.sh
sd_fusing.sh编辑如下
#!/bin/bash if [ -e /dev/sdb ] then echo fusing... dd iflag=dsync oflag=dsync if=./zImage of=/dev/sdb seek=1057 else echo /dev/sdb is not find! exit -1 fi echo fused OK!!! |
(内核文件夹lib、include、drivers,我们可以把自己编写的驱动代码放入对应文件夹里,通过编写Makefile、Kconfig将我们写源码并入内核代码中)(我们也可以看出Makefile 、Kconfig 、 源码 三者有机联系构成一个模块存在在内核中,并在menuconfig配置菜单中显示,详情可以看下:https://blog.csdn.net/loongembedded/article/details/39376435)
注意:内核代码的烧入时,注意脚本烧入的seek=1057( bl1.bin +bl2.bin + uboot.bin = 1057 块 )
sd卡前面一段我们已经存放了uboot代码,避免内核源码覆盖uboot。(不同的uboot,seek起点也不一样,我们可以自己事先du一下三个文件的大小)
第三步 :文件系统的制作
我们通过前两个步骤,基本搭建起了系统,但系统只是“裸机”状态下运行,我可以通过SecureCRT可以看到系统不停的在刷数据。这时,我需要在这“荒芜”的基础之上慢慢建立起东西——文件系统
需要准备的资料:busybox源码包 (如:busybox-1.17.2-20101120.tgz)
主要过程:通过busybox源码包make&&make install命令,在主目录root_fs下生成主要核心文件夹bin/ 、sbin/ 、 usr/ 、linuxrc等,然后在这个基础之上,复制一些linux系统的一些文件夹来完善所要创建的文件系统,最后一步就是将文件系统挂在到开发板上了。
详情推荐:https://blog.csdn.net/asklw/article/details/52611594