先给自己打个广告,本人的微信公众号正式上线了,搜索:张笑生的地盘,主要关注嵌入式软件开发,股票基金定投,足球等等,希望大家多多关注,有问题可以直接留言给我,一定尽心尽力回答大家的问题
本系列文章还是为了记录在学习韦东山老师的嵌入式开发教程中的课程笔记,并整理一个比较详细的课堂笔记,方便一起学习的同学们参考。
如果还没有购买韦老师的教学视频,或者不知道去哪里购买的,我这里给大家一个小程序链接
分享好视频资源后,我们开始今天的正式内容,话不多说,直接开始今天的修改步骤
- 修改文件 G:\source_code\linux-3.4.2\arch\arm\mach-s3c24xx\common-smdk.c 中的结构体smdk_default_nand_part
static struct mtd_partition smdk_default_nand_part[] = {
[0] = {
.name = "bootloader",
.size = SZ_256K,
.offset = 0,
},
[1] = {
.name = "params",
.offset = MTDPART_OFS_APPEND,
.size = SZ_128K,
},
[2] = {
.name = "kernel",
.offset = MTDPART_OFS_APPEND,
.size = SZ_2M,
},
[3] = {
.name = "rootfs",
.offset = MTDPART_OFS_APPEND,
.size = MTDPART_SIZ_FULL,
}
};
- 同时修改G:\source_code\linux-3.4.2\arch\arm\mach-s3c24xx\mach-mini2440.c中的结构体 mini2440_default_nand_part,保证和第1步中的一致
static struct mtd_partition mini2440_default_nand_part[] __initdata = {
[0] = {
.name = "bootloader",
.size = SZ_256K,
.offset = 0,
},
[1] = {
.name = "params",
.offset = MTDPART_OFS_APPEND,
.size = SZ_128K,
},
[2] = {
.name = "kernel",
.offset = MTDPART_OFS_APPEND,
.size = SZ_2M,
},
[3] = {
.name = "rootfs",
.offset = MTDPART_OFS_APPEND,
.size = MTDPART_SIZ_FULL,
}
};
- 上面两步移植好之后,可以正确启动kernel了,但是有一串打印,发现是无法启动根文件系统,打印如下,表示文件系统不支持
- 我们尝试烧写一个之前的yaffs2文件系统
nfs 30000000 192.168.0.106:/work/nfs_root/fs_mini_mdev.yaffs2
nand erase.part rootfs
nand write.yaffs 30000000 260000 889bc0
nfs 32000000 192.168.0.106:/work/nfs_root/uImage_new
bootm 32000000
执行完之后,打印提示不支持yaffs2文件系统
5. 我们尝试使用之前的jffs2文件系统
nfs 30000000 192.168.0.106:/work/nfs_root/fs_mini_mdev.jffs2
nand erase.part rootfs
nand write.jffs2 30000000 260000 $filesize
set bootargs console=ttySAC0,115200 root=/dev/mtdblock3 rootfstype=jffs2
nfs 32000000 192.168.0.106:/work/nfs_root/uImage_new
bootm 32000000
仍然无法启动jffs2文件系统,说明我们需要制作新的文件系统jffs2
6. 制作根文件系统,重新编译busybox,用哪个编译器编译内核,就用哪个编译器编译busybox,make menuconfig 需要修改交叉编译器前缀名
7. 创建一个新目录,用于安装新的busybox
mkdir /work/nfs_root/fs_mini_mdev_new
- 安装busybox
make install CONFIG_PREFIX=/work/nfs_root/fs_mini_mdev_new
- 安装库,在/work/nfs_root/fs_mini_mdev_new 创建目录
mkdir /work/nfs_root/fs_mini_mdev_new/lib
mkdir /work/nfs_root/fs_mini_mdev_new/usr/lib -p
先确定库在哪里,我们可以查看交叉工具链 echo $PATH,进入到交叉编译器的目录
cd /work/tools/usr/local/arm/4.3.2/bin
cd ..
find -name lib
拷贝库到相关文件系统目录
cp /work/tools/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib/*so* /work/nfs_root/fs_mini_mdev_new/lib -d
cp /work/tools/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/lib/*so* /work/nfs_root/fs_mini_mdev_new/usr/lib -d
- 构建相关目录
cp first_fs/etc fs_mini_mdev_new -rf
mkdir /work/nfs_root/fs_mini_mdev_new/dev
创建两个设备节点,创建之前可以先看一下这两个节点的设备号
ls -l /dev/console /dev/null
cd /work/nfs_root/fs_mini_mdev_new
sudo mknod dev/console c 5 1
sudo mknod dev/null c 1 3
- 制作文件系统
cd /work/nfs_root
mkfs.jffs2 -n -s 2048 -e 128KiB -d fs_mini_mdev_new -o fs_mini_mdev_new.jffs2
- 烧写新的文件系统
nfs 30000000 192.168.0.109:/work/nfs_root/fs_mini_mdev_new.jffs2
nand erase.part rootfs
nand write.jffs2 30000000 260000 $filesize
set bootargs console=ttySAC0,115200 root=/dev/mtdblock3 rootfstype=jffs2
nfs 32000000 192.168.0.109:/work/nfs_root/uImage_new
bootm 32000000
启动完成之后,还是无法进入根文件系统,这是因为我们的busybox支持EABI,但是之前编译的内核却不支持,因此我们需要重新编译内核,支持EABI
13. 重新配置内核支持EABI
set bootargs console=ttySAC0,115200 root=/dev/mtdblock3 rootfstype=jffs2
nfs 32000000 192.168.0.109:/work/nfs_root/uImage_eabi
bootm 32000000