乐趣区

关于c:S3C2440移植linux342内核之修改分区以及制作根文件系统

上一节 S3C2440 移植 linux3.4.2 内核之内核框架介绍及简略批改咱们简略配置了内核,这节来依据持续批改内核。

启动内核

  内核启动的打印信息如下图所示

  能够看到内核有 8 个分区,而咱们的 uboot 只有 4 个分区。

0x00000000-0x00040000 : "bootloader"            // 寄存 uboot
0x00040000-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.0
tar -xjf busybox-1.20.0.tar.bz2
cd busybox-1.20.0
make 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 1
sudo 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 文件系统。

如遇到排版错乱的问题,能够通过以下链接拜访我的 CSDN。

**CSDN:[CSDN 搜寻“嵌入式与 Linux 那些事”]

退出移动版