今天把u-boot,linux,yaffs2文件系统的移植全部搞定了,在我的mini2440板子上跑起来了,呵呵,兴奋啊!现在回头看看自己花了这么长时间所作的工作,结论就是,只要坚持下去就一定会成功的。

  下面就把我移植过程中的步骤记录下来,留着以后看看,也许还会用到的。

  先是u-boot部分:

  我用的是

               开发环境:fedora 14

开发板:mini2440  256M NandFlash   64M SDRAM

交叉编译器:arm-linux-gcc 4.4.3

BusyBox版本:busybox-1.7.0

yaffs制作工具:mkyaffsimage

yaffs2制作工具:mkyaffs2image(适合64M)、mkyaffs2image-128(适合128M以上,我的256M的用这个)

对于u-boot的修改有很多,参考了韦东山大神写的那本《嵌入式Linux应用开发完全手册》一步步做的,建议这部分大家也都自己动手做做,会有不少收获,对于那种文件的树形结构分布,程序设计的能力都会有很大的提高。

  当u-boot移植能够在板子跑了,在看下面内容:

  我一直困惑在MTD那部分,对于NAND flash分区那一直不是很清楚,先看我现在的mtd分区:

Creating 3 MTD partitions on "NAND 256MiB 3,3V 8-bit":

0x000000000000-0x000000500000 : "kernel"

0x000000500000-0x000000d00000 : "jffs2"

0x000000d00000-0x000010000000 : "yaffs"

我创建了3的分区,分别作为 uImage,jffs2,yaffs2文件存放的地址,在u-boot运行后,使用tftp下载kernel及文件系统到内存,接着写入flash中,具体如下:

tftp 0x31000000 uImage

nand erase 0 0x500000

nand write.jffs2 0x31000000 0 0x300000

  要注意的是,这里写到flash中的地址对应着我们的MTD分区表地址,我的0地址处存放的是kernel,所以下载到0地址处。

static struct mtd_partition friendly_arm_default_nand_part[] = {

[0] = {   .name = "supervivi",   .size = 0x00040000,   .offset = 0,  },

[1] = {   .name = "param",   .offset = 0x00040000,   .size = 0x00020000,  },

[2] = {   .name = "Kernel",   .offset = 0x00060000,   .size = 0x00500000,  },

[3] = {   .name = "root",   .offset = 0x00560000,   .size = 1024 * 1024 * 1024,  },

[4] = {   .name = "nand",   .offset = 0x00000000,   .size = 1024 * 1024 * 1024,  }

};

这是之前的mtd分区,修改后如下:(在 arch/arm/mach-s3c2440/mach-mini2440.c中)

static struct mtd_partition friendly_arm_default_nand_part[] = {

[0] = {   .name = "kernel",   .size = 0x00050000,   .offset = 0,  },

[1] = {   .name = "jaffs",   .offset = MTDPART_OFS_APPEND,   .size = 0x00080000,  },

[2] = {   .name = "yaffs",   .offset = MTDPART_OFS_APPEND,   .size = MTDPART_SIZ_FULL,

}

};

当然在写入flash之前最后先下载到内存里跑一下,看能否运行,不然来回擦除flash太费事,而且也有损于它。

使用:

tftp 0x32000000 uImage bootm 0x32000000

看看能不能打印出这句:

Creating 3 MTD partitions on "NAND 256MiB 3,3V 8-bit":

0x000000000000-0x000000500000 : "kernel"

0x000000500000-0x000000d00000 : "jffs2"

0x000000d00000-0x000010000000 : "yaffs"

如果可以那说明这一步实现了。由于开发板上还没有写入文件系统,也没有设置nfs挂接网络文件系统,所以内核启动后还会出现panic信息。不急, 我们下一步来解决它。 在这之前,先解释一下几个概念:

1.uImage

使用 make uImage编译 我们编译linux结束后会在arch/arm/boot/目录下生成zImage,uImage内核文件,这有什么区别呢? 之前一直没有去研究他们,现在明白了,简单的说一下区别:  uImage是U-boot专用的映像文件,它是在zImage之前加上一个长度为0x40的tag。vmlinuz是bzImage/zImage文件的拷贝或指向bzImage/zImage的 链接。initrd是“initialramdisk”的简写。一般被用来临时的引导硬件到实际内核vmlinuz能够接管并继续引导的状态。 vmlinux是内核文件,zImage是一般情况下默认的压缩内核映像文件,压缩vmlinux,加上一段解压启动代码得到,只能从0X0地址运行。 uImage是u-boot使用bootm命令引导的Linux压缩内核映像文件格式,使用工具mkimage对普通的压缩内核映像文件(zImage)加工而得。 可以由bootm命令从任意地址解压启动内核。由于bootloader一般要占用0X0地址,所以,uImage相比zImage的好处就是可以和bootloader共存。 当我们使用ls -l 查看这两个文件大小时会发现,uImage比zImage大了64字节,也就是多了0x40长度的tag.

2.bootm

下载到内存后,使用bootm引导uImage,那为什么不用go命令呢? 原因是,我们上面所说的多出64字节的uImage,bootm你可以把它理解为专为它引导的命令。go命令是用来跳转的二进制可执行文件的命令。这些,我们 在mini2440裸机开发那想必大多数人都接触过,不再细说了!

3.MTDPART_OFS_APPEND

是代表着接着上一个分区地址向下分区,offset偏移。

4.MTDPART_SIZ_FULL flash

分区剩下的所有大小空间都分配出去。

接着上面说的,写入flash后,保存引导参数。我这里是在u-boot中代码固定的。

#define CONFIG_BOOTDELAY 5

#define CONFIG_BOOTARGS     "noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0"

#define CONFIG_ETHADDR     08:00:3e:26:0a:5b

#define CONFIG_NETMASK      255.255.255.0

#define CONFIG_IPADDR  192.168.1.230

#define CONFIG_SERVERIP  192.168.1.10 /*#define CONFIG_BOOTFILE "elinos-lart" */

#define CONFIG_BOOTCOMMAND "nboot 0x31000000 0 0; bootm 0x31000000"

这样开机后,不打断便可进入kernel。

下一节介绍文件系统部分!

转载于:https://www.cnblogs.com/my-life/p/3486073.html

u-boot,linux,文件系统移植笔记1相关推荐

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

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

  2. linux io映射,【原创】Linux 文件系统移植全解密以linux-2.6.35内核源码为例说明一下IO静态映射的过程...

    最近不断有人跟我说起静态映射的问题,今天就以linux-2.6.35内核源码为例说明一下IO静态映射的过程(ARM平台). //init/main.c asmlinkage void __init s ...

  3. AT91RM9200Linux移植笔记(三)-移植Linux kernel 2.6.17

    AT91RM9200Linux移植笔记(三)-移植Linux kernel 2.6.17 手上板子原来自带的是2.4.19的内核, 打算移植新的2.6的内核,从网上下了2.6.17的kernel,下载 ...

  4. Linux内核移植和根文件系统制作(详细步骤精讲)

    第一章移植内核 1.1 Linux内核基础知识 1.1.1 Linux版本 1.1.2 什么是标准内核 1.1.3 Linux操作系统的分类 1.1.4 linux内核的选择 1.2 Linux内核启 ...

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

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

  6. 十九.Linux开发之根文件系统移植——根文件系统的原理

    有道云笔记地址: 详情看这里链接,记录太多,就不一一排版了. http://note.youdao.com/noteshare?id=f9c7c1b589233d7b6ed661c3749f1ce8& ...

  7. 【SRE笔记 2022.9.59.6 linux文件系统及软件安装命令】

    SRE笔记 2022.9.5&9.6 文件系统 定义 分区格式化 常见文件系统 文件系统组成 生产文件系统选型 三商 磁盘性能指标 常见性能指标 查看命令iostat iotop gzip命令 ...

  8. grub linux rootfs,rootfs文件系统(笔记)(草稿)

    文件系统简介 文件系统就是个软件,帮用户来管理一些二进制的信息,管理外存上存储的这些二进制 各种文件在内存中都是以二进制的形式来存在的,如果没有文件系统,用户就需要自己去决定这些二进制的东西是什么,需 ...

  9. fedora学习笔记 6:浅谈linux文件系统

    文件系统是linux里非常重要的一个概念,这么一个重要而且常见的字眼理解起来并不容易,很多人对它认识相当模糊.对许多从windows平台迁移过来的用户来说,它更是一个思想上的挑战. 1>文件系统 ...

最新文章

  1. jdk 版本和内部版本对应_JDK 14 Rampdown:内部版本27
  2. MSSQL → 02:数据库结构
  3. mysql exp 注入_使用exp进行SQL报错注入
  4. Linux下将pycharm图标添加至桌面
  5. @PropertySource和@ConfigurationProperties
  6. 如何在SQL Server 2016中使用R导入/导出CSV文件
  7. 中国喷漆室保护膜市场趋势报告、技术动态创新及市场预测
  8. Nginx实战基础篇六 通过源码包编译安装部署LNMP搭建Discuz论坛
  9. c语言程序设计教程 郭浩志,C语言程序设计教程答案杨路明郭浩志.doc
  10. 构建freeswitch, make cd-moh-install下载不了文件怎么办?
  11. 开发电脑应该是8核(8线)
  12. 【优化布局】基于matlab遗传算法求解配电变电站布局优化问题【含Matlab源码 1317期】
  13. 信道编码与matlab仿真 刘东华,【网安学术】交织技术对信道编码的性能影响研究...
  14. 计算机毕业设计(69)php小程序毕设作品之疫苗预约小程序系统
  15. 零基础如何学 Web 前端开发?
  16. linux 串口ttyS, ttyACM 还是ttyUSB?
  17. springMVC配置多数据源
  18. 二战时图灵机破译的Enigma密码,现在AI仅需13分钟便可破译
  19. Spring Security Oauth2 JWT----单点登录、注销、续签的问题
  20. 计算机上的enc代表什么,对讲机上的ENC/SQL,PWR,MONI,PTT按扭都是什么意思?

热门文章

  1. scrapy没有运行结果_关于Scrapy爬虫项目运行和调试的小技巧(下篇)
  2. 基于随机梯度下降法的手写数字识别、epoch是什么、python实现
  3. php三维数组转换二维数组,php 三维数组转二维数组(多维数组变合拼二维数组)(foreach循环 数组叠加)...
  4. android+录像中截图软件下载,录屏截图大师app
  5. activemq使用linux内核机制,activemq基础之:(四)CentOS7 Linux搭建activemq
  6. 删除linux目录下一半的文件,Linux面试题(一):删除一个目录下的所有文件,但保留一个指定文件...
  7. python3 线程池监控线程是否停止工作_Python线程池——个人总结,如果你不喜欢就不要喷,勿...
  8. linux支持异步io吗,Linux 异步IO
  9. cockroachdb mysql_CockroachDB学习笔记——[译]CockroachDB中的SQL:映射表中数据到键值存储...
  10. java创建线程几种_java中创建线程有几种方式