本系列文章还是为了记录在学习韦东山老师的嵌入式开发教程中的课程笔记,并整理一个比较详细的课堂笔记,方便一起学习的同学们参考。
如果还没有购买韦老师的教学视频,或者不知道去哪里购买的,我这里给大家一个小程序链接


分享好视频资源后,我们开始今天的正式内容,话不多说,直接开始今天的修改步骤
修改文件 G:\source_code\linux-3.4.2\arch\arm\mach-s3c24xx\common-smdk.c 中的结构体smdk_default_nand_part
staticstruct 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步中的一致
staticstruct 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文件系统
执行完之后,打印提示不支持yaffs2文件系统
nfs 30000000 192.168.0.106:/work/nfs_root/fs_mini_mdev.yaffs2 nand erase.part rootfs nand write.yaffs 30000000260000889bc0
nfs 32000000192.168.0.106:/work/nfs_root/uImage_new bootm 32000000 我们尝试使用之前的jffs2文件系统
仍然无法启动jffs2文件系统,说明我们需要制作新的文件系统jffs2
nfs 30000000 192.168.0.106:/work/nfs_root/fs_mini_mdev.jffs2 nand erase.part rootfs nand write.jffs2 30000000260000 $filesize set bootargs console=ttySAC0,115200 root=/dev/mtdblock3 rootfstype=jffs2
nfs 32000000192.168.0.106:/work/nfs_root/uImage_new bootm 32000000 制作根文件系统,重新编译busybox,用哪个编译器编译内核,就用哪个编译器编译busybox,make menuconfig 需要修改交叉编译器前缀名
创建一个新目录,用于安装新的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 10. 构建相关目录
cpfirst_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 51 sudo mknod dev/null c 13 11. 制作文件系统
cd /work/nfs_root mkfs.jffs2 -n -s 2048 -e 128KiB -d fs_mini_mdev_new -o fs_mini_mdev_new.jffs2 12. 烧写新的文件系统
nfs 30000000192.168.0.109:/work/nfs_root/fs_mini_mdev_new.jffs2 nand erase.part rootfs nand write.jffs2 30000000260000 $filesize set bootargs console=ttySAC0,115200 root=/dev/mtdblock3 rootfstype=jffs2
nfs 32000000192.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 32000000192.168.0.109:/work/nfs_root/uImage_eabi bootm 32000000 ---------------------------------------------------------------------------------------------------------------------- 我们尊重原创,也注重分享,文章来源于微信公众号:张笑生的地盘,建议关注公众号查看原文。如若侵权请联系qter@qter.org。 ----------------------------------------------------------------------------------------------------------------------
|