S3C2440移植linux3.4.2内核之修改分区以及制作根文件系统_s3c2440嵌入式linux内核移植怎么创建根目录文件系统_嵌入式与Linux那些事的博客-程序员信息网

技术标签: 移植内核  嵌入式软件  根文件系统  linux  linux3.4.2移植笔记  s3c2440  

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_16933601/article/details/105879455

智能推荐

分库分表技术演进&最佳实践_weixin_34327223的博客-程序员信息网

每个优秀的程序员和架构师都应该掌握分库分表,这是我的观点。移动互联网时代,海量的用户每天产生海量的数量,比如:用户表订单表交易流水表以支付宝用户为例,8亿;微信用户更是10亿。订单表更夸张,比如美团外卖,每天都是几千万的订单。淘宝的历史订单总量应该百亿,甚至千亿级别,这些海量数据远不是一张表能Hold住的。事实上MySQL单表可以存储10亿...

nutch-1.0添加JE中文分词-修改源码…_nuoline的博客-程序员信息网

这几天一直在搞nutch中文分词,也转载了好几篇文章,但是都写的比较简单而且有错误,估计原作者肯定也是实现了,今天终于搞定了,介绍一下我实现的方法。1 nutch有两种方式可以实现自定义的分词:1>,直接修改源代码,对默认的分词器代码进行修改使其使用自定义中文分词程序。2>,插件机制,可以在不修改源代码基础上,以插件形式集成自定义中文分词功能。这中法可以参考nutch已经集成的德语和法语

解决win7 anaconda 安装 Failed to create menus-程序员信息网

win7 anaconda 安装 Failed to create menus, anaconda python对照表

re.sub()用法详解_IT之一小佬的博客-程序员信息网

re.sub()用法详解源代码、参数及其意义:def sub(pattern, repl, string, count=0, flags=0): """Return the string obtained by replacing the leftmost non-overlapping occurrences of the pattern in string by the replacement repl. repl can be either a string or

同时安装tensorflowl和pytorch和torch-geometric_torch和tensorflow能一起用么_kin55的博客-程序员信息网

其实根本不用换源pip install tensorflow==2.1 -i https://pypi.tuna.tsinghua.edu.cn/simple

k8s(九)ingress_防止ingress监控_cc_奋斗ing的博客-程序员信息网

k8sIngress介绍Http代理Https代理Ingress介绍我们已经知道,Service对集群之外暴露服务的主要方式有两种:NodePort和LoadBalancer,但是这两种方式,都有一定的缺点:NodePort方式的缺点是会占用很多集群机器的端口,那么当集群服务变多的时候,这个缺点就愈发明显。LoadBalancer的缺点是每个Service都需要一个LB,浪费,麻烦,并且需要kubernetes之外的设备的支持。基于这种现状,kubernetes提供了Ingress资源对象,I

随便推点

黑金开发板zynq7020_黑金zynq7020代码_wz1hrt08的博客-程序员信息网

在跟着黑金教程学习Linux的过程中发现根据教程编译的内核在执行到petalinux_build的时候出现如下错误ERROR: petalinux-user-image-1.0-r0 do_rootfs: [log_check] petalinux-user-image: found 1 error message in the logfile:[log_check] ERROR: ld.so: object ‘libpseudo.so’ from LD_PRELOAD cannot be preloa

编程入门干货,腾讯高级Android架构师程序员分享,收藏必读_Android心路历程的博客-程序员信息网

自从人类第一台计算机出现至今,互联网划时代的体现已经改变了我们的生活,我们已经离不开互联网了,而且未来的发展永远也不会离开互联网计算机这个行业,随着即将兴起的人工智能,互联网已经稳坐行业发展第一的宝座。越来越多的人选择加入这个行业,那么加入编程这个行业你应该怎么做或者怎么学习呢?下面就给大家分享下腾讯高级架构师的心得;如今IT新技术日新月异。就常用编程语言而言,有C/C++、汇编、Java...

不止SQL优化,数据库还有哪些优化大法?_除了索引优化数据库还有什么优化方法_柒柒Java的博客-程序员信息网

前言当有人问你如何对数据库进行优化时,很多人第一反应想到的就是SQL优化,如何创建索引,如何改写SQL,他们把数据库优化与SQL优化划上了等号。当然这不能算是完全错误的回答,只不过思考的角度稍微片面了些,太“程序员思维”化了,没有站在更高层次来思考回答。那今天我们就将视角拔高,站在架构的角度来聊聊这一问题,数据库优化可以从哪些维度入手?正如上图所示,数据库优化可以从架构优化,硬件优化,DB优化,SQL优化四个维度入手。此上而下,位置越靠前优化越明显,对数据库的性能提升越高。我们常说的SQ

php 开发环境显示所有错误; preg_replace preg_replace_callback 函数用法_fastadmin preg_replace_callback报错_fareast_mzh的博客-程序员信息网

php 开发环境显示所有错误<?phperror_reporting(E_ALL);ini_set('display_errors', 1);preg_replace  preg_replace_callback 函数用法<?php// http://php.net/manual/en/function.preg-replace.php// mixed preg...

想练习SQL又没有数据库环境?这几个可以在线练习SQL的网站满足你_sql在线练习网站_Lvshen的技术小屋的博客-程序员信息网

如果你想练习SQL,恰巧你的电脑没有SQL环境,那么下面几个在线练习SQL的网站肯定能满足你的需求。TiDB“地址:https://tour.pingcap.com/”作为在2019 TiDB 黑客马拉松中斩获二等奖的项目,TiDB-Wasm 的诞生是WebAssembly (Wasm),[Golang]语言以及TiDB 社区碰撞结合的产物,旨在为用户提供一个可以轻松实验 SQL 语句,使用 MySQL 查询测试 TiDB 的 SQL 兼容性的方式。以命令行的形式展示。SQL F

结对编程之效能分析_Ensheng Shi的博客-程序员信息网

作业三 文本文件中英语单词的频率作业要求:项目git地址:Assigment3_of_ASE作业简介step0-输出某个英文文本文件中 26 字母出现的频率,由高到低排列,并显示字母出现的百分比,精确到小数点后面两位step1:输出单个文件中的前 N 个最常出现的英语单词。step2: 支持 stop wordsstep3: 我们想看看常用的短语是什么, 怎么办呢?step...

推荐文章

热门文章

相关标签