【内核配置】一、从标准linux-2.6.22.6系统到ARM平台JZ2440开发板的linux系统的修改攻略
主 机:VMWare--Ubuntu-16.04.2-x64-100ask
开发板:JZ2440--256M NandFlash, 2M NorFlash, 64M SDRAM, LCD-4.3寸;
bootlorder:u-boot1.16, Kernel:2.6.22.6;
编译器:arm-linux-gcc-3.4.5
工作目的:裁剪、打补丁、配置、修改,得到一个包含uboot、内核、根文件系统的可在JZ2440开发板上运行的linux系统;
一、u-boot配置/使用
1. 解压u-boot-1.1.6.tar.bz2;得到u-boot-1.1.6文件夹;
命令:tar xjf u-boot-1.1.6.tar.bz2
2. 打补丁u-boot-1.1.6_jz2440.path到u-boot-1.1.6;
命令:cd u-boot-1.1.6
命令:patch -p1 < ../u-boot-1.1.6_jz2440.patch
3. 配置
命令:make 100ask24x0_config //配置
命令:make //编译得到uboot.bin;
*4.设置环境变量--看门狗倒数计时:
命令:set bootdelay 10 //由3s改为10s;
命令:save //保存环境变量到flash空间;Saving Environment to NAND...
命令:reset //重启,观察看门狗倒数计时的改变现象;
二、内核配置/启动
1. 解压linux-2.6.22.6.tar.bz2:得到linux-2.6.22.6
命令:tar xjf linux-2.6.22.6.tar.bz2
2. 打补丁linux-2.6.22.6_jz2440.patch:
命令:cd linux-2.6.22.6
命令:patch -p1 < ../linux-2.6.22.6_jz2440.patch
3. 配置,直接使用百问网提供的config_ok配置文件,省去大量配置工作;
1)命令:make s3c2410_defconfig
2)命令:cp config_ok .config
4. 配置菜单
命令:make menuconfig
设置菜单,结束后退出菜单设置界面;
(此命令一般会造成编译错误,原因是因为Makefile文件和Ubuntu的make工具最新版本不完全匹配,可查看本人博客园的博客解决)
5. 编译并生成uImage;
命令:make uImage
6. 加载内核
命令:k [k]Download linux kernel uImage.
命令:通过DNW传输内核到单板。
7. 启动内核
命令:b [b]Boot the system.
观察串口控制台的打印信息,由于没有文件系统,只能启动到一半。
8. 重启电源。
三、根文件系统
1. 加载根文件系统映像
命令:k [k]Download linux kernel uImage.
命令:通过DNW传输内核到单板。
2. 启动内核和系统
命令:b [b]Boot the system.
观察串口控制台的打印信息;
3. 配置并编译busybox:
a. 命令:上传busybox-1.7.0tar.bz2到Ubuntu服务器并解压切入路径:busybox-1.7.0;
b. 查看INSTALL文件,了解Busybox的建立方法;
c. 配置busybox:
命令:make menuconfig
操作:按照《嵌入式完全开发手册》_17.2_busybox设置
d. 编译busybox:
1)修改busybox根目录的Makefile, 使用交叉编译器:
176 CROSS_COMPILE ?=
改为:
176 CROSS_COMPILE ?= arm-linux-
2)编译Busybox:
命令:make
e. 安装Busybox:
命令:mkdir -p /work/nfs_root/fs_first
命令:make CONFIG_PREFIX=/work/nfs_root/fs_first install
注:切勿直接命令:make install; 否则,将安装到默认PC机文件系统,破坏系统!
4. 构建最小根文件系统(五项内容)
a. 仿照PC机的设备文件,创建两个设备文件:
控制台(终端)/dev/console 无ID标准输入/输出/报错定位-/dev/null
命令:mkdir dev
命令:cd dev/
命令:sudo mknod console c 5 1
命令:sudo mknod null c 3 1
b. init->busybox, 第三节已经完成了;
c. /etc/inittab ;配置文件
命令: mkdir etc
命令: ls
bin dev etc linuxrc sbin usr
命令:vi etc/inittab
console::askfirst:-/bin/sh
命令: cat etc/inittab
console::askfirst:-/bin/sh
d. 配置文件指定的应用程序,最小根文件系统暂时不需要;
e. C库;
1)创建路径:/work/nfs_root/fs_first/lib
命令:/work/nfs_root/fs_first$ mkdir -p /work/nfs_root/fs_first/lib
2)复制PC机Linux系统的动态库到/work/nfs_root/fs_first/lib:
命令:cd /work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib
命令:cp *.so* /work/nfs_root/fs_first/lib/ -d
如此,即创建好了最小根文件系统。
5. 烧写最小根文件系统到开发板
5.1 把最小根文件系统制作一个映像文件fs_first.yaffs2;
a. 生成制作yaffs2映像文件的工具
/workbook/jz2440/system$ tar xjf yaffs_source_util_larger_small_page_nand.tar.bz2
/workbook/jz2440/system$ cd Development_util_ok/
/workbook/jz2440/system$ cd Development_util_ok/yaffs2/utils
/workbook/jz2440/system/Development_util_ok/yaffs2/utils$ make
。。。mkyaffs2image 。。。
.../utils$ sudo cp mkyaffs2image /usr/local/bin/
.../utils$ sudo chmod +x /usr/local/bin/mkyaffs2image
b. 制作yaffs2映像文件
.../utils$ cd /work/nfs_root/
/work/nfs_root$ mkyaffs2image fs_first fs_first.yaffs2
(...文件生成过程的打印...)
/work/nfs_root$ ls
... fs_first.yaffs2 ... //此即yaffs2映像文件;
5.2 回传并烧写最小根文件系统的映像文件到开发板;
5.3 启动系统;
6. 结束。