免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5985 | 回复: 11
打印 上一主题 下一主题

[g-bios] 完全支持从SD卡启动 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-10-11 11:23 |只看该作者 |倒序浏览
支持从SD卡启动BH、kernel以及挂载rootfs

Task List:
  • TH部分支持MMC
  • TH部分支持file system(fat32 和ext3)
  • Boot kernel,支持从SD卡挂载rootfs

论坛徽章:
0
2 [报告]
发表于 2011-10-12 11:15 |只看该作者
本帖最后由 voidjackjiang 于 2011-10-12 15:50 编辑

先完成如下两个任务:
1 从sd卡load th(linn)
a) 在sd卡上分一个区,并设置为启动分区
b) 将该分区格式化为fat32文件系统
c) 将g-bios-th.bin 拷贝到该分区中,并命名为MLO
d) 将该SD卡制作成sd.img(或直接从/dev/mmcblk0启动)
2 完善th中的mmc loader机制(kidd)
a) 从SD卡中读取BH实际大小的数据
b) 研究SD卡img的制作

论坛徽章:
0
3 [报告]
发表于 2011-10-13 10:56 |只看该作者
本帖最后由 kidd_chan 于 2011-10-17 11:33 编辑

该patch使th 从sd卡load bh时, 支持多个块的读取(bh大小固定为2M)

论坛徽章:
0
4 [报告]
发表于 2011-10-13 17:05 |只看该作者
本帖最后由 kidd_chan 于 2011-10-17 11:35 编辑

该patch使th 从sd卡load bh时, 支持多个块的读取(bh大小固定为2M).

patch-support_multiple_blocks.tar.gz

836 Bytes, 下载次数: 32

论坛徽章:
0
5 [报告]
发表于 2011-10-13 17:54 |只看该作者
本帖最后由 linnnnil 于 2011-10-17 22:58 编辑

简单介绍下使用qemu从sd卡loade th的方法步骤:
1.插入sd卡。

2.确认sd设备节点被创建。(假设为sdb)

3.$sudo fdisk /dev/sdb。
键入 m 查看命令信息。把所有分区删除后。(<cr>代表回车)
键入 n <cr> p <cr> 1 <cr>后再回车两次。创建一个分区。
键入 a <cr> 1 <cr> w <cr> 把第一个分区设置为可启动分区。

4.sudo mkfs.vfat /dev/sdb1。
将第一个分区格式化为fat32。

5.将g-biosh-th.bin重命名为MLO,并将其拷贝到sd卡的第一个分区。

6.$sudo qemu-system-arm -M beagle -serial stdio -net nic -net tap -sd /dev/sdb.启动qemu

如出现no boot device found错误。把sd卡的MBR读取出来,判断一下是否是第一个分区未设置成可启动分区,如果不是则重新设置一下。ok!

论坛徽章:
0
6 [报告]
发表于 2011-10-13 18:37 |只看该作者
本帖最后由 linnnnil 于 2011-10-15 07:48 编辑

简单介绍下两种制作img文件的方法。

一、使用qemu-img命令。
1、$qemu-img create -f vdi sd.img 1G
创建一个名为sd.img格式为vdi大小为1G的img文件。

2、$sudo modprobe nbd
创建nbd设备节点。

3、$qemu-nbd -c /dev/nbd0 sd.img
将设备节点与sd.img文件链接。

4、这样可以把sd.img文件当成普通的块设备节点使用。

二、使用dd命令创建img文件。
1、$dd if=/dev/sdb of=sd.img count=10000 bs=512
创建一个名为sd.img,bolock为512字节,大小为1000*512个字节的img文件。

论坛徽章:
0
7 [报告]
发表于 2011-10-15 15:42 |只看该作者
目前的进展是直接在th/driver/mmc/mmc.c中实现了一个简单的fat_read函数,已经可以从fat32文件系统中读取bh的img并启动,但是更好的办法是直接调用bh部分的fat32代码,但要做一定的修改。

论坛徽章:
0
8 [报告]
发表于 2011-10-15 16:47 |只看该作者
本帖最后由 linnnnil 于 2011-10-16 08:32 编辑

分析了一下bh的文件系统,bh目前支持fat32和ext2文件系统和flash和mmc卡的驱动。
简单介绍下bh的文件系统框架。

bh对文件系统进行了四层封装。

第一层:用户层。

用户层提供了mount open read close umount函数,此层把具体的文件系统和具体的设备驱动对用户层进行了屏蔽。

mount函数未实现对文件系统的自动识别。

第二层:文件系统层。

这层会根据具体的文件系统类型调用相应的文件系统驱动对文件进行操作。

第三层:块设备层。

这层为文件系统层提供调用块存储设备驱动的统一接口,由这层决定调用具体的块设备驱动对相应的存储设备进行读写。

第四层:存储设备驱动层

这层提供直接对flash或mmc的存储设备的读写驱动。

这样的架构为以后支持更多的文件系统和存储设备驱动留下了很好的拓展性。面向对象的思想在这里得到了应用。当我们后期支持了新的文件系统或新的设备驱动,只需要将这个文件系统和驱动分别注册到块设备层和文件系统层就可以了。

要把这样的架构移植到th,需要解决很多问题,最需要克服的问题是控制th的大小和th运行时对ram资源的消耗以满足嵌入式的系统的苛刻要求。
在实际的产品应用中,客户也许只需要一种文件系统和设备驱动,应该提供一种可配置机制供用户对th进行裁剪。同时也可以控制th文件的大小。

论坛徽章:
0
9 [报告]
发表于 2011-10-15 22:59 |只看该作者
本帖最后由 kidd_chan 于 2011-10-17 11:42 编辑

该patch简单支持th从SD卡load bh(暂时只支持fat32文件系统) patch-support_load.tar.gz (2.09 KB, 下载次数: 34)

论坛徽章:
0
10 [报告]
发表于 2011-10-17 12:25 |只看该作者
从fat32文件系统上load bh的patch有如下几个问题:
  • patch本身中有多余的空格
  • compile的时候有warning
  • 原先对SD卡raw read的部分代码没必要删除,可以用宏来控制从两种方式中的一个来load BH
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP