上一节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.yaffs2nand erase.part rootfsnand 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_newbootm 32000000


  打印信息示意不反对该内核不反对yaffs文件系统,而后尝试应用ext3 ext2 cramfs vfat msdos iso9660等来挂载

烧写jffs2文件系统

   在.config中搜寻JFFS2,发现反对JFFS2文件系统

  下载文件系统

nfs 30000000 192.168.1.30:/work/nfs_root/fs_mini_mdev.jffs2nand erase.part rootfsnand write.jffs2 30000000 260000  $filesizeset 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.bz2cd 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/libmkdir /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.jffs2nand erase.part rootfsnand write.jffs2 30000000 260000  $filesizeset bootargs console=ttySAC0,115200 root=/dev/mtdblock3 rootfstype=jffs2nfs 32000000 192.168.2.106:/work/nfs_root/uImage_newbootm 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那些事”]