今天接着移植Linux 3.4.2内核,接着上一篇文章(点击查看:上一篇文章)我们完成了内核的串口启动打印输出,但是无法挂载根文件系统,我们看看启动后显示的是什么:

从打印结构可以看出,我们的分区不对,在U-boot移植(点击查看:Uboot分区)中,我们已经对整个系统进行分区了,现在打印说我们的分区不对,一定是内核里也有分区的相关设置,我们需要去修改内核:
在common-smdk.c中(具体怎么找到这个函数,可以从串口打印找到关键字在内核中搜索看看关键字符串在哪里出现过,这个技巧对于初不熟悉内核架构的人来说很管用),有如下函数,对应的分区的设置:

/* NAND parititon from 2.4.18-swl5 */static struct mtd_partition smdk_default_nand_part[] = {[0] = {.name   = "Boot Agent",.size   = SZ_16K,.offset = 0,},[1] = {.name   = "S3C2410 flash partition 1",.offset = 0,.size   = SZ_2M,},[2] = {.name   = "S3C2410 flash partition 2",.offset = SZ_4M,.size   = SZ_4M,},[3] = {.name   = "S3C2410 flash partition 3",.offset = SZ_8M,.size   = SZ_2M,},[4] = {.name   = "S3C2410 flash partition 4",.offset = SZ_1M * 10,.size   = SZ_4M,},[5] = {.name   = "S3C2410 flash partition 5",.offset = SZ_1M * 14,.size   = SZ_1M * 10,},[6] = {.name   = "S3C2410 flash partition 6",.offset = SZ_1M * 24,.size   = SZ_1M * 24,},[7] = {.name   = "S3C2410 flash partition 7",.offset = SZ_1M * 48,.size   = MTDPART_SIZ_FULL,}
};

将分区修改为如下这样的:
0x00000000-0x00040000 : “bootloader”
0x00040000-0x00060000 : “params”
0x00060000-0x00260000 : “kernel”
0x00260000-0x10000000 : “root”
即改为:

/* NAND parititon from 2.4.18-swl5 */static struct mtd_partition smdk_default_nand_part[] = {[0] = {.name   = "bootloader",.size   = SZ_256K,.offset = 0,},[1] = {.name   = "params",.offset = MTDPART_OFS_APPEND,//紧接着上一个分区.size   = SZ_128K,},[2] = {.name   = "kernel",.offset = MTDPART_OFS_APPEND,.size   = SZ_2M,},[3] = {.name   = "rootfs",.offset = MTDPART_OFS_APPEND,.size   = MTDPART_SIZ_FULL,   //剩下的所有分区}};

注释:如果我们之前使用的及其ID是set machid 7CF(本身使用的是set machid 16a,查看之前的文章看相关内容:点击查看之前的文章)那么我们需要修改的地方是:mach-mini2440.c文件(与common-smdk.c在同一个目录)中的结构体:


/* NAND Flash on MINI2440 board */static struct mtd_partition mini2440_default_nand_part[] __initdata = {[0] = {.name   = "u-boot",.size   = SZ_256K,.offset = 0,},[1] = {.name   = "u-boot-env",.size   = SZ_128K,.offset = SZ_256K,},[2] = {.name   = "kernel",/* 5 megabytes, for a kernel with no modules* or a uImage with a ramdisk attached */.size   = 0x00500000,.offset = SZ_256K + SZ_128K,},[3] = {.name   = "root",.offset = SZ_256K + SZ_128K + 0x00500000,.size   = MTDPART_SIZ_FULL,},
};

改为:


/* NAND Flash on MINI2440 board */static struct mtd_partition mini2440_default_nand_part[] __initdata = {[0] = {.name   = "bootloader",.size   = SZ_256K,.offset = 0,},[1] = {.name   = "params",.offset = MTDPART_OFS_APPEND,//紧接着上一个分区.size   = SZ_128K,},[2] = {.name   = "kernel",.offset = MTDPART_OFS_APPEND,.size   = SZ_2M,},[3] = {.name   = "rootfs",.offset = MTDPART_OFS_APPEND,.size   = MTDPART_SIZ_FULL,   //剩下的所有分区}
};

我们这里一直使用的是set machid 16a这个机器ID。

好了:
重新编译内核用nfs挂载(具体方法看上一篇文章)内核,启动,显示如下:

由此可知,我们的分区已经正常了,只是还缺少文件系统没有烧写。
我们先烧写一个简单的文件系统看一下能否正常启动系统:
nfs 30000000 192.168.1.101:/work/nfs_root/fs_mini_mdev.yaffs2
nand erase.part rootfs
nand write.yaffs 30000000 260000 889bc0 (这个889bc0大小是文件系统的大小,根据实际情况修改)

烧写文件系统后下载内核启动:
nfs 32000000 192.168.1.101:/work/nfs_root/uImage_new
bootm 32000000

发现还是启动不了,显示不支持yaffs2文件系统,那么再试一下jffs文件系统是否可以:
nfs 30000000 192.168.1.101:/work/nfs_root/fs_mini_mdev.jffs2
nand erase.part rootfs
nand write.jffs2 30000000 260000 5b89a8

nfs 32000000 192.168.1.101:/work/nfs_root/uImage_new
bootm 32000000
显示:

文件系统已经挂载上去了,但是无法启动init进程。

那么看来我们需要制作新的文件系统了!!!我们新的内核不支持我们老的文件系统。

为了区分开,制作文件系统,我们放到下一篇文章(点击链接查看下一篇文章:点击查看)

想一起探讨以及获得各种学习资源加我(有我博客中写的代码的原稿):
qq:1126137994
微信:liu1126137994
可以共同交流关于嵌入式,操作系统,C++语言,C语言,数据结构等技术问题。

【移植Linux 3.4.2内核第二步】之修改系统分区相关推荐

  1. 【移植Linux 3.4.2内核之四】修改内核代码支持YAFFS文件系统

    上一篇文章,我们从0制作jffs2文件系统,因为我们的内核本身就支持iffs2文件系统,但是它不支持yaffs文件系统.今天我们就来修改内核代码,让内核支持yaffs文件系统的格式. 1.首先我们获取 ...

  2. 【移植Linux 3.4.2内核第三步】从0制作支持新内核的文件系统

    学习交流加 个人qq: 1126137994 个人微信: liu1126137994 学习交流资源分享qq群: 962535112 上一篇文章,我们修改了内核代码改了系统的分区,但是最后启动,发现虽然 ...

  3. 【移植Linux 3.4.2内核第一步】之简单修改

    前一阵子已经将U-boot移植好了,从今天开始,我们开始移植linux内核.移植的内核为3.4.2,移植的开发板为:jz2440开发板. 想看之前移植U-boot的记录,可以查看我的博客专栏,点击链接 ...

  4. 移植Linux 3.4.2内核到JZ2440开发板(超精讲)

    Linux 3.4.2内核移植到JZ2440开发板 0.开发环境 虚拟机:VMware workstation 16 pro 宿主机操作系统:Ubuntu 16.04 开发板:JZ2440 移植内核版 ...

  5. 树莓派linux iso镜像下载,树莓派(Raspberry Pi)修改系统镜像(img)

    树莓派修改系统镜像 讨论如何使用通过loop设备映射文件,挂载树莓派img中的分区,然后像普通的文件系统那样修改镜像分区中的文件. 有2个关键点 如何确认分区的起始位置,以及分区的范围. 不同版本的l ...

  6. linux 修改时间的命令,Linux 常用命令(查看版本、修改系统时间)

    1.查看内核版本:cat /proc/version [root@gjxb default]# cat /proc/version Linux version 2.6.9-78.8AXS2smp (p ...

  7. Linux内核移植笔记 | 02 - 移植Linux 3.4.2 内核到JZ2440(修改内核中的mtd分区)

    1. 问题 在上一节Linux系统启动之后,打印出的分区表如图: 和实际对nand flash的分区表不一致,实际上在uboot移植教程(08 - 移植uboot 2012.04到JZ2440(设置m ...

  8. 织女星开发板能移植linux吗,织女星开发板启动模式修改——从ARM M4核启动

    前言 刚开始玩织女星开发板的时候,想先从熟悉的ARM核入手,连上Jlink,打开MDK版本的Demo程序,编译OK,却检测不到芯片,仔细看了一下文档,原来RV32M1芯片默认从RISC-V核启动,如果 ...

  9. linux升级到指定内核版本,如何在CentOS/RHEL上安装或升级新的内核版本

    Linux内核是一个整体的类Unix计算机操作系统内核.通常我们使用的Linux发行版,如Red Hat.Debian.SUSE等,这些都称为Linux的分发版.一个典型的分发版,是由Linux内核, ...

最新文章

  1. day14 集合与函数
  2. discuzx2.5添加自定义积分日志
  3. brew install php55 报错 clang: error
  4. PHP中的pack和unpack函数
  5. English trip -- VC(情景课)1 F Another view
  6. python教程视频下载-Python学习精品教程,视频书籍打包下载
  7. Apache Lucene Java 全文检索引擎架构
  8. 【SimpleITK】医疗影像分割结果评价指标计算
  9. Ubuntu安装gcc编译器
  10. 植物大战僵尸无尽模式最强阵容可以无限打
  11. java后端要会写前端吗_后端开发有必要学习前端吗,如何入门呢
  12. 【2021软件创新实验室暑假集训】总结篇
  13. Redhat 8修改系统语言为英文
  14. 海洋磁力数据处理步骤
  15. 什么牌子的护眼灯对眼睛好?性价比最高的护眼灯
  16. C++全角与半角互转
  17. Android中WebView控件支持地理位置定位
  18. VB-Excel编程经历*
  19. 【数字图像处理】Python使用PIL库压缩图片大小——按比例压缩
  20. Excel Sheet Column Title

热门文章

  1. Java:这是一份全面 详细的 Synchronized关键字 学习指南
  2. html:(3):认识html标签和标签的语法
  3. java学习(27):巩固练习
  4. python评估不平衡数据集_Python Pandas:平衡不平衡的数据集(用于面板分析)
  5. WIN10远程连接时提示内部错误
  6. 【题解】洛谷P4145 花神游历各国(线段树)
  7. POJ 4979 海贼王之伟大航路 【状压dp】【北大ACM/ICPC竞赛训练】
  8. GridView直接更新数据,kartik\grid\EditableColumn用法 [ 2.0 版本 ]
  9. 最全面的Android Studio使用教程【申明:来源于网络】
  10. 内存数据库和关系数据库之间的数据同步原理