免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 8750 | 回复: 21

[g-bios] 完善boot kernel机制 [复制链接]

论坛徽章:
0
发表于 2011-10-11 12:04 |显示全部楼层
完善boot kernel机制

Task List:
  • 支持从NAND、SD、以及网络启动kernel并挂载rootfs
  • 添加支持从UBIFS分区挂载rootfs的command选项

论坛徽章:
0
发表于 2011-10-12 11:38 |显示全部楼层
boot -f num 可以指定mount rootfs 的分区,因此首先制作ubifs image, 然后测试启动时能否 mount。

方法:
      1. 软件环境: g-bios + qemu
      2. 硬件环境:模拟devkit8000板子

进展:
      1. 虚拟机下 kernel 启动成功;
      2. 基本ubifs rootfs image 制作成功;

问题:
      1. kernel 启动没有正确mount rootfs,基本确定ubifs image 参数设置不对。

ps: devkit8000 kernel configuration 见附件,使用如下:
      $ mv devkit8000_kernel_config.bz2 kernel_path/.config

devkit8000_kernel_config.bz2

52.47 KB, 下载次数: 36

论坛徽章:
0
发表于 2011-10-12 17:21
本帖最后由 CQMW114 于 2011-10-12 17:23 编辑

进展中遇到的问题
[    4.511779] UBI: attaching mtd7 to ubi0
[    4.526550] UBI: physical eraseblock size:   131072 bytes (128 KiB)
[    4.527862] UBI: logical eraseblock size:    129024 bytes
[    4.529541] UBI: smallest flash I/O unit:    2048
[    4.529998] UBI: sub-page size:              512
[    4.530364] UBI: VID header offset:          512 (aligned 512)
[    4.530792] UBI: data offset:                2048
[    7.958221] UBI: max. sequence number:       0
[    7.958770] UBI error: ubi_read_volume_table: the layout volume was not found


没有找到the layout volume,而the layout volume是存放number of volumes,their sizes and properties.

论坛徽章:
0
发表于 2011-10-12 18:09 |显示全部楼层
本帖最后由 yifei_wang 于 2011-10-12 18:11 编辑

可能原因分析:
      1. ubifs rootfs image 制作参数有误;
      2. kernel command line 传错;
      3. ...

论坛徽章:
0
发表于 2011-10-12 18:22 |显示全部楼层
(1)制作一个简单的rootfs,.rootfs/bin/目录下存放arm-linux-gcc4.6静态编译生成的init文件。

(2)之后,开始制作ubifs.img,根据zImage启动时所获得的参数,可知:
[    4.511779] UBI: attaching mtd7 to ubi0
[    4.526550] UBI: physical eraseblock size:   131072 bytes (128 KiB)
[    4.527862] UBI: logical eraseblock size:    129024 bytes
[    4.529541] UBI: smallest flash I/O unit:    2048
[    4.529998] UBI: sub-page size:              512
[    4.530364] UBI: VID header offset:          512 (aligned 512)
[    4.530792] UBI: data offset:                2048
[    7.958221] UBI: max. sequence number:       0


(3)mkfs.ubifs 参数如下:
mkfs.ubifs -r .path/rootfs -m 2048 -e 129024 -c 1872 -o ubifs.img --squash-rino-perm

论坛徽章:
0
发表于 2011-10-12 18:32
(1)制作一个简单的rootfs,.rootfs/bin/目录下存放arm-linux-gcc4.6静态编译生成的init文件。

(2)之后,开始制作ubifs.img,根据zImage启动时所获得的参数,可知:
[    4.511779] UBI: attaching mtd7 to ubi0
[    4.526550] UBI: physical eraseblock size:   131072 bytes (128 KiB)
[    4.527862] UBI: logical eraseblock size:    129024 bytes
[    4.529541] UBI: smallest flash I/O unit:    2048
[    4.529998] UBI: sub-page size:              512
[    4.530364] UBI: VID header offset:          512 (aligned 512)
[    4.530792] UBI: data offset:                2048
[    7.958221] UBI: max. sequence number:       0


(3)mkfs.ubifs 参数如下:
mkfs.ubifs -r .path/rootfs -m 2048 -e 129024 -c 1872 -o ubifs.img --squash-rino-perm

论坛徽章:
0
发表于 2011-10-12 18:47 |显示全部楼层
本帖最后由 yifei_wang 于 2011-10-12 18:52 编辑

kernel boot command line (attach mtd0 to UBI and mount volume "rootfs" (from kernel ubifs.txt):
  1. ubi.mtd=0 root=ubi0:rootfs rootfstype=ubifs
复制代码
其中:
      1. ubi.mtd: 指定 rootfs 在第几个mtd上,系统会据此将ubi attach 到 ubi0.
      2. root=: 指定rootfs 所处的volume,该参数的指定有两种写法:
           a. ubi_device_name:ubi_volume_name, such as "ubi0:rootfs";
           b. ubi_device_name_ubi_volume_label, such as "ubi0_0".
      3. rootfstype: 顾名思义。

在 g-bios 中加载 ubifs rootfs image 时传入的command line 为:
  1. [    0.000000] Kernel command line: ubi.mtd=7 root=ubi0_0 rootfstype=ubifs mtdparts=omap2-nand.0:0x80000@0x0(g-bios),0x200000@0x80000(g-bios),0x20000@0x280000(g-bios),0x300000@0x2A0000(linux),0x300000@0x5A0000(ramdisk),0x4000000@0x8A0000(rootfs),0x4000000@0x48A0000(data_1),0x7760000@0x88A0000(data_2) ip=10.0.0.2:10.0.0.1:10.0.0.1:255.255.255.0:maxwit.googlecode.com:eth0:off console=ttyO0,115200
复制代码
看似没何不妥...

参考资料:
      1. http://www.linux-mtd.infradead.org/doc/ubifs.html
      2. http://www.linux-mtd.infradead.org/faq/ubifs.html
      3. http://blog.csdn.net/sydjm/article/details/6790259

论坛徽章:
0
发表于 2011-10-12 18:49 |显示全部楼层
(1)制作一个简单的rootfs,.rootfs/bin/目录下存放arm-linux-gcc4.6静态编译生成的init文件。

(2)之后 ...
CQMW114 发表于 2011-10-12 18:32



    此 image 制作可能有问题,具体可参考: http://www.linux-mtd.infradead.org/faq/ubifs.html

论坛徽章:
0
发表于 2011-10-12 20:43 |显示全部楼层
本帖最后由 yifei_wang 于 2011-10-12 21:57 编辑

Create UBIFS image

       UBIFS 是工作在 UBI 层之上的, 因此意味着创建 ubifs image 必须包括两个步骤: 1. 首先创建ubifs image; 2. 其次创建ubi image.
  
      因此, 具体的ubifs image 创建过程如下(qumu 模拟的devkit8000):

1. 参数确定:
       g-bios download kernel image 后, 输入命令 # boot -f 7, 得到如下信息:
  1. [    1.472869] NAND device: Manufacturer ID: 0x2c, Chip ID: 0xba (Micron NAND 256MiB 1,8V 16-bit)
  2. [    1.474914] 8 cmdlinepart partitions found on MTD device omap2-nand.0
  3. [    1.475708] Creating 8 MTD partitions on "omap2-nand.0":
  4. [    1.476684] 0x000000000000-0x000000080000 : "g-bios"
  5. [    1.496276] 0x000000080000-0x000000280000 : "g-bios"
  6. [    1.510803] 0x000000280000-0x0000002a0000 : "g-bios"
  7. [    1.522949] 0x0000002a0000-0x0000005a0000 : "linux"
  8. [    1.537353] 0x0000005a0000-0x0000008a0000 : "ramdisk"
  9. [    1.552001] 0x0000008a0000-0x0000048a0000 : "rootfs"
  10. [    1.603271] 0x0000048a0000-0x0000088a0000 : "data_1"
  11. [    1.655029] 0x0000088a0000-0x000010000000 : "data_2"
  12. [    1.740753] OneNAND driver initializing
  13. [    1.748260] UBI: attaching mtd7 to ubi0
  14. [    1.748992] UBI: physical eraseblock size:   131072 bytes (128 KiB)
  15. [    1.749755] UBI: logical eraseblock size:    129024 bytes
  16. [    1.750427] UBI: smallest flash I/O unit:    2048
  17. [    1.751037] UBI: sub-page size:              512
  18. [    1.751586] UBI: VID header offset:          512 (aligned 512)
  19. [    1.753173] UBI: data offset:                2048
  20. [    3.494934] UBI: max. sequence number:       0
  21. [    3.495666] UBI error: ubi_read_volume_table: the layout volume was not found
  22. [    3.499847] UBI error: ubi_init: cannot attach mtd7
复制代码
据此可以得到相应的 flash 参数:
       1. physical eraseblock size:   131072 bytes (128 KiB)
       2. logical eraseblock size:      129024 bytes
       3. smallest flash I/O unit:     2048
       4. sub-page size:                  512
       5. VID header offset:            512 (aligned 512)
       6. data offset:                      2048

2. 创建简单 rootfs 目录: lablin
        作为测试,该目录中仅包含 dev/, proc/, sys/, etc/ 等空目录.

3. 创建 ubifs image:
  1. $ mkfs.ubifs -q -r  lablin -m 2048 -e 129024 -c 1024 -o ubifs.img
复制代码
4. 创建 ubi image:
  1. $ ubinize -o ubi.img -m 2048 -p 128KiB -s 512 ubinize.cfg
复制代码
其中 ubinize.cfg 内容为:
  1. [ubifs]
  2. mode=ubi
  3. image=ubifs.img
  4. vol_id=0
  5. vol_size=100MiB
  6. vol_type=dynamic
  7. vol_name=rootfs
  8. vol_flags=autoresize
复制代码
创建成功后, 将 ubi.img 通过 g-bios 中 tftp download 到相应的分区7, 并且启动, 出现如下错误:
  1. [    3.495666] UBI error: ubi_read_volume_table: the layout volume was not found
  2. [    3.499847] UBI error: ubi_init: cannot attach mtd7
复制代码
并且启动是由 g-bios 传入到 kernel 的 command line 为:
  1. [    0.000000] Kernel command line: ubi.mtd=7 root=ubi0_0 rootfstype=ubifs mtdparts=omap2-nand.0:0x80000@0x0(g-bios),0x200000@0x80000(g-bios),0x20000@0x280000(g-bios),0x300000@0x2A0000(linux),0x300000@0x5A0000(ramdisk),0x4000000@0x8A0000(rootfs),0x4000000@0x48A0000(data_1),0x7760000@0x88A0000(data_2) ip=10.0.0.2:10.0.0.1:10.0.0.1:255.255.255.0:maxwit.googlecode.com:eth0:off console=ttyO0,115200
复制代码
这与没有 download ubi image 到分区中效果是一样的, 因此有理由怀疑是 ubi image 制作的问题...

      继续解决中...

参考资料:
      1. http://www.linux-mtd.infradead.org/faq/ubifs.html#L_mkfubifs

论坛徽章:
0
发表于 2011-10-12 21:24 |显示全部楼层
本帖最后由 CQMW114 于 2011-10-12 21:32 编辑

再次确认command line问题。
(1)boot -f 7运行后,得到
  1. Kernel command line: ubi.mtd=7 root=ubi0_0 rootfstype=ubifs mtdparts=omap2-nand.0:0x80000@0x0(g-bios),0x200000@0x80000(g-bios),
  2. 0x20000@0x280000(gbios),0x300000@0x2A0000(linux),0x300000@0x5A0000(ramdisk),0x4000000@0x8A0000(rootfs),0x4000000@0x48A0000(data_1),0x7760000@0x88A0000(data_2) ip=10.0.0.3:10.0.0.1:10.0.0.1:255.255.255.0:maxwit.googlecode.com:eth0:off console=ttyO0,115200
复制代码


(2)boot -f 7 -l ubi.mtd=7 root=ubi0_0 rootfstype=ubifs
  1. Kernel command line: ubi.mtd=7 root=ubi0_0 rootfstype=ubifs mtdparts=omap2-nand.0:0x80000@0x0(g-bios),0x200000@0x80000(g-bios),
  2. 0x20000@0x280000(gbios),0x300000@0x2A0000(linux),0x300000@0x5A0000(ramdisk),0x4000000@0x8A0000(rootfs),0x4000000@0x48A0000(data_1),0x7760000@0x88A0000(data_2) ip=10.0.0.3:10.0.0.1:10.0.0.1:255.255.255.0:maxwit.googlecode.com:eth0:off console=ttyO0,115200
复制代码

结果相同,不能确认 -l 选项能够修改默认参数。
建议重新检查制作image的步骤的正确性。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP