在上一节最后我们已经成功传递了机器id,启动了内核,但是在挂接跟文件系统的时候出现了错误,这一节的内容我们就来解决这些问题
1、修改内核分区
先来修改内核中的分区信息,后面再来解决文件系统的问题,原来的内核在启动的时候会打印出分区的信息,可以根据这些输出信息来在内核中定位出分区信息的位置,由于我当时在启动的时候没有保存那些信息,所以这里就无法显示,我使用的smdk2440单板的分区信息是在
arch/arm/mach-s3c24xx/common-smdk.c,根据分区名称搜索,修改之后如下
static struct mtd_partition smdk_default_nand_part[] = {
[0] = {
.name = "bootloader", //分区名称
.size = SZ_256K, //大小
.offset = 0, //便宜1111111111偏移
},
[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, //剩下所有的
}
};
把修改的文件更新到服务器上,编译内核,make uImage,使用nfs下载
cp arch/arm/boot/uImage /work/nfs_root //nfs目录
nfs 32000000 192.168.1.101:/work/nfs_root/uImage
bootm 32000000
内核启动之后打印出1111111111111111分区信息,已经改变
第一步就已经完成,emmm,挺简单的,要注意的是,我在做实验的时候,uboot给内核传递的机器id是16a,代表的是smkd2440
所以修改分区的时候修改的是文件mach-s3c24xx.c,如果实际使用的不是这个机器id,那么就根据内核打印出来的分区信息,查找是哪个文件,去修改即可
2、制作文件系统
这个版本的内核还不支持对yaffs2文件系统的挂载,它在启动的时候找不到这个类型的文件系统
所以要去创建jffs2文件系统,要使用busybox,版本是busybox-1.20.0,把压缩包上传到服务器上,解压,进入目录
make menuconfig
busybox setting ->
build option ->
cross compiler prefix 配置交叉编译前缀
保存,退出,make
然后创建一个目录,用于安装文件系统 mkdir -c /work/nfs_root/fs_mini_mdev_my
安装文件系统 make install CONFIG_PREFIX=/work/nfs_root/fs_mini_mdev_my
进入这个目录,会发现已经有了一些文件了
安装应用程序要用的库
查看交叉编译工具,看它的库在哪里
echo $PATH
/home/book/bin:/home/book/.local/bin:/usr/local/arm/4.3.2/bin:/usr/local/sbin:/usr/local/bin:
/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/work/tools/gcc-3.4.5-glibc-2.3.6/bin:/snap/bin
进入目标目录
cd /usr/local/arm/4.3.2/bin/
find -name lib
./lib
./arm-none-linux-gnueabi/libc/usr/lib
./arm-none-linux-gnueabi/libc/thumb2/usr/lib
./arm-none-linux-gnueabi/libc/thumb2/lib
./arm-none-linux-gnueabi/libc/lib
./arm-none-linux-gnueabi/libc/armv4t/usr/lib 要使用
./arm-none-linux-gnueabi/libc/armv4t/lib 要使用
./arm-none-linux-gnueabi/lib
只有两个目录是我们要用的 ,因为其他目录里的文件残缺不全,所以并不需要
拷贝usr/lib (在刚在新建的文件夹下先创建/usr/lib目录)
cd /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/lib
cp so /work/nfs_root/fs_mini_mdev_my/usr/usr/lib -d(表示原来是连接文件,拷贝之后还是链接文件)
拷贝lib,同上
cd /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib
cp so /work/nfs_root/fs_mini_mdev_my/lib -d
创建etc目录
因为我之前单独一篇中介绍了制作跟文件系统的过程,这里直接使用上次的etc目录,不懂得可以去看
pwd /work/nfs_root/fs
cp etc/ …/fs_mini_mdev_my/ -rf
cat /etc/init.d/rcS
一些文件的信息如下
创建dev目录
mkdir dev,这个目录下要有两个必要的文件
创建设备节点
sudo mknod dev/console c 5 1
sudo mknod dev/null c 1 3
其他目录
mkdir proc tmp mnt sys root
制作映像文件
mkfs.jffs2 -n -s 2048 -e 128KiB -d fs_mini_mdev_my -o my.jffs2
-s flash一个block的大小
-e 擦除快的大小
-d 目录
-o 输出文件
生成my.jffs2文件系统映像,重新下载
//文件系统
nfs 30000000 192.168.1.101:/work/nfs_root/my.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.1.101:/work/nfs_root/uImage
bootm 32000000
``
启动,可以发现,文件系统已经挂载成功,但是出现如下错误
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200426234450138.png)
**搜索exitcode,定位在exit.c**,继续寻找入下定义
**#define SIGILL 4**
在网上搜索错误类型,发现是什么不支持的指令,因为我们编译文件系统的时候使用的交叉编译工具链带有eabi的属性
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200426234719502.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTc5MTU4MQ==,size_16,color_FFFFFF,t_70)
但是内核不支持,所以就有了这个错误,那就配置内核支持eabi
**make menuconfig** 搜索eabi
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200426234821653.png)
配置
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200426234840319.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTc5MTU4MQ==,size_16,color_FFFFFF,t_70)
重新编译内核,下载内核和文件系统
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200426234938948.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTc5MTU4MQ==,size_16,color_FFFFFF,t_70)
终于,可以挂载文件系统正常并启动
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200426235026215.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTc5MTU4MQ==,size_16,color_FFFFFF,t_70)