ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

S3C2440移植linux3.4.2内核之修改分区以及制作根文件系统

2021-04-16 16:55:14  阅读:235  来源: 互联网

标签:jffs2 文件系统 nfs 内核 mdev S3C2440 root linux3.4


上一节S3C2440移植linux3.4.2内核之内核框架介绍及简单修改我们简单配置了内核,这节来根据继续修改内核。

文章目录


移植Linux3.4.2内核其他文章链接:

S3C2440移植linux3.4.2内核之内核框架介绍及简单修改

S3C2440移植linux3.4.2内核之修改分区以及制作根文件系统

S3C2440移植linux3.4.2内核之支持YAFFS文件系统

S3C2440移植linux3.4.2内核之内核裁剪

启动内核

  内核启动的打印信息如下图所示
在这里插入图片描述

  可以看到内核有8个分区,而我们的uboot只有4个分区。

0x00000000-0x00040000 : "bootloader"            //存放uboot0x00040000-0x00060000 : "params"                //存放环境变量0x00060000-0x00260000 : "kernel"                //存放内核0x00260000-0x10000000 : "rootfs"                  //存放文件系统

  所以接下来我们来修改内核分区

修改内核分区

  在si里搜索上图出现的”S3C2410 flash partition”字段,找到位于common-smdk.c中,里面有个数组smdk_default_nand_part[],内容如下所示:
在这里插入图片描述
  修改smdk_default_nand_part[]数组(位于arch/arm/mach-s3c24xx/common-smdk.c)
修改为:

static struct mtd_partition smdk_default_nand_part[] = { [0] = {   .name         = "bootloader",            //0x00000000-0x00040000     .size  = SZ_256K,                      
                   .offset         = 0, }, [1] = {   .name         = "params",                 //0x00040000-0x00060000   .offset = MTDPART_OFS_APPEND, 
                   .size  = SZ_128K, }, [2] = {   .name         = "kernel",                  //0x00060000-0x00260000   .offset = MTDPART_OFS_APPEND,   .size  = SZ_2M, }, [3] = {   .name         = "rootfs",                 //0x00260000-0x10000000   .offset         = MTDPART_OFS_APPEND,   .size  = MTDPART_SIZ_FULL, }};

  上面部分宏的定义,如下所示:
  MTDPART_OFS_RETAIN: 填在offset里,表示先后保留多少size空间大小
  MTDPART_OFS_NXTBLK: 填在offset里,表示从下一个块开始
  MTDPART_OFS_APPEND: 填在offset里,表示该分区位置附加在上个分区结束的地址上
  MTDPART_SIZ_FULL: 填在size里,表示剩下的内存size都归于该分区
若需要mini2440的机器ID,则还需要修改mini2440单板对应的mach-mini2440.c
  因为该单板的mtd分区也不对,将里面的mini2440_default_nand_part[]内容改为和上面一样,拷贝文件到ubuntu重新编译下载内核
在这里插入图片描述

烧写yaffs2文件系统

  烧写 /work/nfs_root fs_mini_mdev.yaffs2文件系统

nfs 30000000 192.168.1.30:/work/nfs_root/fs_mini_mdev.yaffs2
nand erase.part rootfs
nand write.yaffs 30000000 260000  889bc0

  启动文件系统

set bootargs console=ttySAC0,115200 root=/dev/mtdblock3 rootfstype=yaffs2 
nfs 32000000 192.168.1.30:/work/nfs_root/uImage_new
bootm 32000000

在这里插入图片描述
  打印信息表示不支持该内核不支持yaffs文件系统,然后尝试使用ext3 ext2 cramfs vfat msdos iso9660等来挂载

烧写jffs2文件系统

   在.config中搜索JFFS2,发现支持JFFS2文件系统
在这里插入图片描述
  下载文件系统

nfs 30000000 192.168.1.30:/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

  启动后如图所示
在这里插入图片描述
  表示jffs2已挂载,但是找不到init程序,因为这个文件系统的glibc库是交叉编译3.4版本的,由于3.4内核的交叉编译是4.3版本,所以不支持,接下来我们便重新制作文件系统

构造根文件系统

详细步骤可参考构建根文件系统

安装busybox

  首先编译安装busybox(参考以前的busybox安装章节)进入

https://busybox.net/下载busybox 1.20.0tar -xjf busybox-1.20.0.tar.bz2
cd busybox-1.20.0make menuconfig          //设置交叉编译前缀进入Busybox Settings --->Build Options --->() Cross Compiler prefix
在弹出的对话框里面写入:arm-linux-

make          //编译mkdir   /work/nfs_root/fs_mini_mdev_new            //创建要安装的文件系统目录      make install CONFIG_PREFIX=/work/nfs_root/fs_mini_mdev_new   //指定安装位置

  安装完成后有了各种目录
在这里插入图片描述

安装glibc库

  输入$PATH找到交叉编译位于/work/tools/arm-linux-gcc-4.3.2/usr/local/arm/4.3.2位置,
  通过find -name lib,找到有以下几个lib
在这里插入图片描述
  由于ARM9属于ARMv4T架构,所以拷贝上面第三个第四个lib到fs_mini_mdev_new里

mkdir /work/nfs_root/fs_mini_mdev_new/lib
mkdir /work/nfs_root/fs_mini_mdev_new/usr/lib -p  
cp arm-none-linux-gnueabi/libc/armv4t/usr/lib/*.so* /work/nfs_root/fs_mini_mdev_new/usr/lib -d           /* -d:保持链接 */cp arm-none-linux-gnueabi/libc/armv4t/lib/*.so* /work/nfs_root/fs_mini_mdev_new/lib -d

构造etc目录

cp 原来的etc  fs_mini_mdev_new  -rf

构造其它文件/目录

  1)创建终端文件(dev/console和dev/null)

sudo mknod –m 660  dev/console c 5 1sudo mknod –m 660 dev/null c 1 3

  2)创建其它目录

mkdir mnt tmp root proc  sys root

制作jffs2映像文件

  由于mkfs.jffs2工具之前已经安装好了,所以直接使用mkfs.jffs2命令:

cd /work/nfs_root/                 //返回到上个目录mkfs.jffs2 -n  -s 2048  -e 128KiB  -d fs_mini_mdev_new  -o fs_mini_mdev_new.jffs2//-n:表示每块不添加清除标记,-s:NAND的每页为2k,-e: NAND的每块为128kb//-d fs_mini_mdev_new:表示要制作的根文件系统文件//-o fs_mini_mdev_new.jffs2:表示生成的映像文件

  烧写jffs2,启动内核

nfs 30000000 192.168.2.106:/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.2.106:/work/nfs_root/uImage_new
bootm 32000000

  启动内核
  打印如下图所示:
在这里插入图片描述

配置EABI

  进入si,搜索exitcode,找到0x00000004对应的宏定义是SIGILL,表示非法指令,是因为arm-linux-gcc-4.3.2是使用的EABI接口,内核由于未配置,所以出现非法
  配置内核支持EABI
  输入make menuconfig,搜索EABI,找到位于:

kernel feature->[*] Use the ARM EABI to compile the kernel         
make uImage

  重新编译烧写内核就没问题了。
  下一节S3C2440移植linux3.4.2内核之支持YAFFS文件系统我们将修改内核支持yaffs文件系统。

标签:jffs2,文件系统,nfs,内核,mdev,S3C2440,root,linux3.4
来源: https://blog.51cto.com/u_11934066/2711476

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有