CubieBoard中文论坛

 找回密码
 立即注册
搜索
热搜: unable
查看: 10075|回复: 3

修改Nand的bootloader分区

[复制链接]
发表于 2013-5-15 20:21:23 | 显示全部楼层 |阅读模式
本帖最后由 modnar 于 2013-5-16 22:57 编辑

1.先弄一个SD卡可以启动的linux系统。
2.SD启动以后,dd if=/dev/nanda of=nanda.img. 这个img是fat文件格式的
3.把sd卡插到ubuntu或其他linux系统上,mount /路径/nanda.img /mnt
4.在/mnt的目录下,有linux/u-boot.bin,script.bin,script.fex. (fex<->bin文件转换有教程,就不多说了。)
这样 ,就可以用自己修改的u-boot.bin和scrpit.bin替换了。
5.umount
6.再用sd卡启动,把修改过的nanda.img用 dd if=nanda.img of=/dev/nanda 刷进去。


有个问题要问一下@hipboi ,
boot0,boot1在nand上的什么位置,有源码吗?
回复

使用道具 举报

 楼主| 发表于 2013-5-15 23:26:14 | 显示全部楼层
找到一个好帖:

分区篇
在说如何引导系统之前, 先要给大家讲解一下机器内部Flash空间是如何划分的. 各个分区又是用作存储什么内容的.

下面以我手头上8G A10精英版为例. 内部Flash芯片空间是8G, 这8G空间一共被分为9个分区.
+---------------------+
| 分区1: BOOT   (64M) | 存放的是A10官方多系统引导方案的文件 (官方说可引导多系统,但我配置不出来)
| 厂商引导分区        | 关机充电控制代码也在这里分区中, 也负责部分核心硬件的地址配置和初始化工作
+---------------------+
| 分区2: ENV     (2M) | 这个分区保存的是UBOOT引导器的配置信息, 包括启动时执行的命令, 从那个分区加载
| 内核配置信息        | 内核, 又是从哪个分区加载恢复系统内核
+---------------------+
| 分区3: KERNEL (32M) | 存放基础的Linux内核文件(boot.img)分区没有文件系统, 是直接把可运行的内核
| Linux内核分区       | 文件写入分区空间, BOOT分区的uboot引导区会加载本分区内容到内存运行
+---------------------+
| 分区4: SYSTEM (400M)| Android系统分区, 也就是/system目录下的所有文件存放的分区, 为ext3/ext4格式
| Android系统分区     | 本分区包括Java格式的系统运行库还有部分没有编译进内核的硬件驱动库(bin格式)
+---------------------+
| 分区5: DATA (1G)    | Android数据分区, 也就是/data目录对应的分区, 为ext3/ext4格式
| Android数据分区     | 这就是我们所说的把应用安装到机器内存所对应的空间, 同时保存各种动态系统设置
+---------------------+
| 分区6: MISC (1M)    | 这个分区一般不使用, 唯一作用是为了让Android系统与内核引导时交流, 可以指引
| Android配置分区     | 重启机器后让内核进行一些特殊的操作, 如:进入恢复程序, 更新系统文件等操作
+---------------------+
| 分区7: RECOVERY(32M)| 一个特殊的微型Linux系统, 可以不依靠BOOT和SYSTEM分区启动, 类似PC的一键还原
| Android恢复系统     | 可对其他分区进行更新或备份. 如何实现恢复损坏的系统或者系统内核在后面说明.
+---------------------+
| 分区8: CACHE(256M)  | 这个分区并不是做虚拟内存之类的缓存, 这个分区最大的作用是做系统升级时保存
| 缓存分区            | 更新文件的(FAT格式). 配合MISC分区的配置语句来使用, 详细以后介绍.
+---------------------+
| 分区9: STORAGE(所有)| 没错, 剩下的所有空间, 都被划分给内置卡作为存储空间, 8G空间扣除1-7分区的
| 内置存储卡分区      | 使用后, 大概就是剩下5.6G空间, 这就是为什么内置卡容量只有5.6G.
+---------------------+

机器内部的存储空间的划分和各个分区的简单作用就介绍到这里, 下次会介绍系统的上电启动引导的过程.

引导篇
A10的上电引导大致上可以分为以下阶段: BROM -> Boot0 -> Boot1 -> Boot.axf -> u-boot -> kernel -> Android

下面介绍每个阶段所完成的事情.

BROM
BROM, 其实是一段已经固化在A10芯片里面的引导代码, BROM代码存放的地址是0xFFFF0000, 在A10芯片上电后,
CPU自动的从0xFFFF0000地址上加载第一条指令并执行, 因此这里的BROM就和我们电脑主板上的BIOS是一样的, 只是
BROM完成的功能没有BIOS强大. 简单的说, BROM只有2个功能, 第一个就是正常启动从外部存储器中加载运行代码,
第二个也是最重要的一个就是FEL功能. FEL功能, 就是我们接触到的刷机接口. 官方的ROM更新程序就是通过
FEL功能刷写机器的闪存的.

真是由于刷机接口的代码是固化在CPU内部, 不能被改写的原因, 可以说, 所有A10的机器都是刷不死的, 没有变砖的
可能. 所以喜欢折腾的朋友请用力折腾, 只要做好数据的备份, 大不了就是重新用官方的升级工具重刷固件就可以了.

机器进入FEL功能的有两种情况, 第一种就是常用的正常刷机方法: 关机状态下按住菜单键不放连接USB接口. 另外一
种就是Boot0代码的验证标记不正确, BROM也会自动进入FEL功能.

如果机器完全变砖, 没有任何显示, 正常按住菜单键连接USB也不能进入FEL, 那可能就是你机器根本没有完全关闭,
一般A10芯片方案所配合使用的电源控制芯片都是AXP209, 该芯片长按电源开关6秒以上会强制断电, 可先确认断电后再
操作.

AXP209的DATASHEET
http://www.x-powers.com/download/AXP209%20Datasheet%20v1.0_cn.pdf

A10芯片的BROM还有一个的特性, 那就是会优先从0号SD卡引导系统, 没错, 是SD卡, 不是内部闪存NAND. 而一般
0号SD卡所对应的都是机器的的TF卡槽, 因此制作SD卡上的系统完全可以的, 而且也已经有成功的案例.

A10芯片方案上运行的Ubuntu系统 (英文)
http://rhombus-tech.net/allwinner_a10/a10_image/

正是由于是优先从TF引导, 所以通过在TF卡上写入特殊的, 不能通过检验的Boot0代码, 就可以通过插入TF卡后开机强制
机器进入FEL功能进行刷机.

再总结一下BROM的启动流程:
1. BROM是一段固化在CPU内部的代码, 不能被修改和删除. 代码会初始化外部存储设备(内部Flash和SD卡);
2. 检查刷机按钮是否被按下, 有就跳转到3, 没有就跳转到4继续执行;
3. 启动FEL功能, 初始化USB接口等等PC端连接;
3. 正常引导过程, 检查是否有0号SD卡插入, 有则跳转到4, 没有则跳转到7;
4. 读取0号SD卡的8K地址处的内容, 检查是否有Boot0标志, 有则跳转到5, 没有则跳转到7;
5. 根据Boot0头部指定的大小加载所有的Boot0代码到内存中, 检验校验值, 正确跳转到6, 不正确跳转到3;
6. CPU跳转到内存中的Boot0代码上继续执行, BROM工作完成, 控制权交给Boot0的代码;
7. 检查NAND(内部闪存)是否存在, 存在跳转到8, 不存在则跳转到3;
8. 读取NAND的8K地址处的内容, 检查是否有Boot0标志, 有则跳转到9, 没有则跳转到3;
9. 根据Boot0头部指定的大小加载所有的Boot0代码到内存中, 检验校验值, 正确跳转到6, 不正确跳转到3;

补充一下
这里有一个FEL通讯的工具代码, 是使用Linux下的usblib实现的FEL通讯工具, 有兴趣的朋友可以研究修改, 那样就可以
制作出自己的线刷工具, 可以随意的修改机器内部的分区大小了.
sunxi-tools  https://github.com/amery/sunxi-tools
回复 支持 反对

使用道具 举报

发表于 2014-7-7 21:04:15 | 显示全部楼层
请问用来替代原来的“u-boot.bin"的新的u-boot.bin要怎么生成,这个应该是要支持的NAND的把?
回复 支持 反对

使用道具 举报

发表于 2014-7-7 22:51:21 | 显示全部楼层
Y.Q.X 发表于 2014-7-7 21:04
请问用来替代原来的“u-boot.bin"的新的u-boot.bin要怎么生成,这个应该是要支持的NAND的把?
...

lichee uboot
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|粤ICP备13051116号|cubie.cc---深刻的嵌入式技术讨论社区

GMT+8, 2024-11-23 19:50 , Processed in 0.023300 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2012 Comsenz Inc. | Style by Coxxs

返回顶部