上一节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文件系统。

有任何问题,均可通过公告中的二维码联系我

S3C2440移植linux3.4.2内核之修改分区以及制作根文件系统的更多相关文章

  1. mini6410基于linux2.6.36内核通过NFS启动根文件系统总结(四制作根文件系统及通过NFS挂载文件系统)

    http://blog.csdn.net/yinjiabin/article/details/7489563 根文件系统一般包括: 1)基本的文件系统结构,包含一些必须的目录,比如:/dev,/pro ...

  2. 制作根文件系统之内核如何启动init进程

    start_kernel其实也是内核的一个进程,它占用了进程号0,start_kernel的内容简写如下: asmlinkage void __init start_kernel(void) //内核 ...

  3. 移植Linux-3.4.2内核到S3C2440

    一.BootLoader引导内核过程     1.Bootloader的工作     1.1.将内核读入内存     2.2.保存内核启动参数到指定位置,内核启动时去这个位置解析参数     3.3. ...

  4. S3C2440 移植最新5.2linux内核

    基于 移植uboot后. 1. 移植linux内核 1.1 下载源码 打开 https://www.kernel.org/ 直接肝最新的 5.2.8 下载完后,在ubuntu里解压备用. 1.2 搭建 ...

  5. u-boot-2011.06在基于s3c2440开发板的移植之引导内核与加载根文件系统

    http://www.linuxidc.com/Linux/2012-09/70510.htm  来源:Linux社区  作者:赵春江 uboot最主要的功能就是能够引导内核启动.本文就介绍如何实现该 ...

  6. linux 内核移植和根文件系统的制作【转载】

    原文地址:http://www.cnblogs.com/hnrainll/archive/2011/06/09/2076214.html 1.1 Linux内核基础知识 在动手进行Linux内核移植之 ...

  7. linux 内核移植和根文件系统的制作

    1.1 Linux内核基础知识 在动手进行Linux内核移植之前,非常有必要对Linux内核进行一定的了解,下面从Linux内核的版本和分类说起. 1.1.1  Linux版本 Linux内核的版本号 ...

  8. Linux学习 :移植linux-3.4.83到JZ2440开发板

    一.编译环境搭建: 1.linux源码下载:https://www.kernel.org/ (最新)  https://mirrors.edge.kernel.org/pub/linux/kernel ...

  9. TI Davinci DM6446开发攻略——根文件系统的裁剪和移植

    一.补充文件系统知识 Linux根文件系统是存放tool软件.lib文件.script(脚本).配置文件.其他特殊文件.自己开发的应用程序的地方.嵌入式linux的根文件系统rootfs就像windo ...

  10. ARM-Linux移植之(四)——根文件系统构建

    相关工具版本: busybox-1.7.0 arm-linux-4.3.2 linux-2.6.22   1.配置busybox并安装. 在我们的根文件系统中的/bin和/sbin目录下有各种命令的应 ...

随机推荐

  1. C++ Qt开发:LineEdit单行输入组件

    Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍LineEdi ...

  2. Illegal overloaded getter method with ambiguous type for property......

    问题原因 建议 1.boolean类型的属性值不建议设置为is开头,否则会引起rpc框架的序列化异常. 2.如果强行将IDE自动生成的isSuccess()方法修改成getSuccess(),也能获取 ...

  3. 一篇可供参考的 K8S 落地实践经验

    前言 k8s 即 Kubernetes,是一个开源的容器编排引擎,用来对容器化应用进行自动化部署. 扩缩和管理 本篇文章将分享 k8s v1.18.8 的安装,以及其面板,监控,部署服务,使用Ingr ...

  4. 如何找到 niche 出海细分市场的 IDEA

    先说结论就是:看榜单 Why:为什么看榜单? 大家会问为什么?原因很简单: 熟读唐诗三百首,不会作诗也会吟 不天天看榜单上相关的优秀同行,你想干啥 心法就是下苦功夫坚持,量变引起质变,排行榜天天看 竞 ...

  5. C realloc(): invalid next size错误

    C realloc(): invalid next size 问题代码 #include <stdio.h> #include <stdlib.h> int *getNumbe ...

  6. Spring 中循环依赖的处理

    Spring 提供了十分强大的依赖注入功能,使得我们不再需要手动去管理对象的依赖项.然而,在实际的使用场景中,可能会遇到类似下面的依赖异常: Exception encountered during ...

  7. UE5:相机震动CameraShake源码分析

    本文将会分析UE5中相机震动的调用流程,会简要地分析UCameraModifier_CameraShake.UCameraShakeBase等相关类的调用过程. 阅读本文,你至少需要使用或者了解过Ca ...

  8. WinForm如何将子控件插入FlowLayoutPanel开始位置

    需求描述 动态将控件插入到FlowLayoutPanel控件的开始位置 实现方案 将控件添加到FlowLayoutPanel的Controls集合中,默认插到末尾 使用SetChildIndex方法更 ...

  9. Prometheus 快速入门

    Prometheus&Grafana快速入门 一.prometheus简介 prometheus是监控多个大数据组件的监控系统.Prometheus是由SoundCloud开发的开源监控报警系 ...

  10. 云小课|MRS基础原理之CarbonData入门

    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:CarbonDat ...