Linux内核3.0.54移植

2019-07-13 08:29发布

data/attach/1907/c2x0zl10ojyuk72vejeuyqu2yko8tfa1.jpgdata/attach/1907/i18i5lw7q1iykfmui2gy58id9mxrp7nl.jpg                  开门见山            Linux是一个一体化内核(monolithic kernel)系统。“内核”指的是一个提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系统软件。Linux内核的主要模块(或组件)分以下几个部分:存储管理、CPU和进程管理、文件系统、设备管理和驱动、网络通信,以及系统的初始化(引导)、系统调用等。内核由U-boot程序来启动,因此,在移植内核之前我们需要准备的东西: 1.完成Bootloade即U-boot的移植; 2.为我们的内核移植准备好编译环境——交叉编译器; 3.在官网www.kernel.org下载我们的源文件——Linux-3.0.54.tar.bz2。 注意不要下载不稳定的版本。 任务开始 1.创建一个有读写权限的文件夹用来存放我们下载的源文件,并将其解压缩 $tar -xjf linux-3.0.54.tar.bz2 2.配置我们的内核参数 (1).修改Makefile文件 $vim Makefile 这里主要是选择我们的开发平台类型以及将我们的交叉编译器的环境变量设置好。   这里是将生成的zimage文件拷贝到当前目录,在手动添加mkimage工具来自动把Zimage生成可执行之.bin文件。Zimage是内核的映像压缩文件,大小3M左右。 这里是解释这段代码含义,可忽略。 (2).修改晶振频率 所谓晶振频率,就是我们板子的工作频率,晶振全称晶体振荡器,它结合开发板的内部电路,产生时钟频率,板子的一切指令执行均在此基础之上,晶振提供的时钟频率越高,板子的运行速度越快。我们的FL2440的开发板晶振频率为12MHz。 $vim linux-3.0.54/arch/arm/mach-s3c2440/mach-smdk2440.c (3).修改驱动的串口 $vim linux-3.0.54/drivers/tty/serial/Samsung.c 接下来我们把mini2440.config文件作为我们的默认.config文件 cp arch/arm/configs/mini2440_defconfig .config $export TERM=vt100 这里说明TERM环境变量的类型,避免乱码出现 $Make menuconfig menuconfig是常用的配置工具,我们可以用它选择要编译进内核的模块,然后将信息保存在生成的.config配置文件中,make menuconfig时出来的文本窗口中的信息是通过读取在内核源代码目录下的Kconfig文件来配置的。根据Makefile文件来编译,而Makefile文件中的变量则通过.config来进行赋值操作。仅仅在Kconfig中添加选项。


这里添加的是s3c2440,第一个不要选,和图片一样即可。 (4).修改MACHINE ID设备编号 我们做的FL2440内核与三星的SMDK2440一样,我们U-boot使用设备号为1999,板子为s3c2440,所以将mini2440和s3c2440的设备号对换(mini2440即采用三星的s3c2440为处理器) $vim linux-3.0.54/arch/arm/tools/mach-types 配置完成后就可以编译了: $make 过程省略...................................................... 编译过程中的错误请自行解决................................................... 成功以后会生成Linux-s3c2440.bin的可执行二进制文件。 (5)对我们的硬盘(nandflash)进行分区 $vim linux-3.0.54/arch/arm/plat-s3c24xx/common-smdk.c




这里说明一下,我们板子上的nandflash为256M,我们将它分成5个区,分别是 bootloader——1M,内核15M,根文件系统——40M,app——100M,data——100M, 分区完毕以后make $make 编译成功以后我们需要为内核添加根文件系统支持,因为内核启动首先挂载的是根文件系统。这里制作的是简单的initramfs文件系统作为根文件系统,其他的文件系统大家可以自己了解制作也可以参考我的后续文章。 export TERM=vt100 $Make menuconfig

这里是选择支持initramfs文件系统,还要填写其所处位置,我的是/opt/rootfs/,这个路径在后续制作根文件系统的时候会创建起来。 选择完以后重新make,我们的内核即可在开发板中启动。