x2600君正 ubi文件系统的编译和烧录

使用平台:君正x2600 ubi文件系统使用问题

1.ubi文件和ubifs文件

2 方法:mkfs.ubifs和ubinize两步打包ubi文件系统

mkfs.ubifs工具
mkfs.ubifs命令用于制作ubifs文件系统,命令示例如下:

mkfs.ubifs -x lzo -m 2KiB -e 124KiB -c 360 -o ./tmp_ubifs.img -d ./rootfs
1 参数含义:

-x:指定压缩算法

-m:最小读写单位,也就是页的大小

-e:逻辑擦除块的大小,注:逻辑擦除块不等同于物理擦除块,常用计算方法是:(一个擦除块的页数 - 2)* 页大小,在这里即:(64 - 2) * 2048 = 124KiB

-c:最大的逻辑擦除块个数,这个需要根据分区大小进行计算,常用计算方法是:总块数- 2(volume table) - 1(Wear-leveling) - 1(atomic LEB change) - ?(bad blocks) ,当前的系统中,文件系统分区的大小为:0x3200000 / (64 * 2048) = 400,也就是400个块,如果我们为坏块保留36个块,那么该值即为:400 – 2 -1 -1 -36 = 360

-o:指定输出文件的文件名

-d:指定根文件系统目录

ubinize工具

ubinize命令:ubinize -o rootfs_ubifs.bin -m 2KiB -p 128KiB -s 2KiB ./ubinize_config
参数含义:

-o rootfs_ubifs.bin:输出的BIN文件名称,后继U-BOOT烧录(nand wirte),应用升级,烧录器烧片,均使用的是此文件

-m 2KiB:最小读写单位,也就是页的大小

-p 128KiB:物理擦除块的大小

-s 2KiB:SUB PAGE的大小

./ubinize_config:上面的配置文件

ubinize配置文件的内容如下:ubinize.cfg是ubiniz工具制作ubi镜像需要指定的配置文件

[ubifs]
mode=ubi
image=rootfs.ubifs   # mkfs.ubi生成的源镜像
vol_id=0                   #卷序号
vol_size=70MiB     #卷大小
vol_type=dynamic  #动态卷
vol_name=rootfs    #卷名
vol_flags=autoresize

1) [rootfs]:为INI文件SECTION名字,没有特别含义

2) mode=ubi,具体含义未知

3) image=./tmp_ubifs.img:使用mkfs.ubifs生成的镜像文件的路径

4) vol_id=0:卷ID,注意其必须与bootargs参数对应上

5) vol_size=45711360:卷大小,其计算方式是:最大逻辑擦除块个数 * 逻辑块大小,这两个参数就是mkfs.ubifs的参数,360 * 124KiB = 45711360

6) vol_name=rootfs:卷名字,注意其必须与bootargs参数对应上

7) vol_type=dynamic,具体含义未知

8) vol_alignment=1,具体含义未知

mkfs.ubifs和ubinize两个工具 制作UBIFS镜像 ,具体步骤如下:

我的GD5F2GM7UEYIGR的参数:页面大小:2KB。容量:2Gb(或256MB)

  • 1.使用mkfs.ubifs命令将某个文件夹(目前我是将buildroot下output/target文件夹),制作为UBIFS镜像,具体命令为:

mkfs.ubifs -d ./target -e 0x1f800 -c 2048 -m 0x800 -x lzo  -o rootfs.ubifs
修正:
mkfs.ubifs -r ./target -o rootfs.ubifs -m 2048 -e 126976 -c 560

  • 2.新建和设置ubinize.cfg文件内容:

[ubifs]
mode=ubi
image=rootfs.ubifs  

vol_id=0
vol_size=70MiB
vol_type=dynamic
vol_name=rootfs
vol_flags=autoresize

  • 3.使用ubinize命令可将使用mkfs.ubifs命令制作的UBIFS文件系统镜像(rootfs.ubifs)转换成可直接在FLASH上烧写的格式(带有UBI文件系统镜像卷标)

ubinize -o rootfs.ubi -m 0x800 -p 0x20000 -s 512 ubinize.cfg
修正:
ubinize -o rootfs.ubi -m 2048 -p 128KiB  ubinize.cfg

  • 4.生成的rootfs.ubi可直接使用NAND FLASH的烧写命令烧写到FLASH上。

经过上述两个步骤,可以成功的编译出ubi文件系统,并烧录成功!

 烧录的时候,在烧录conler.exe软件,要正确的配置

 

其他问题记录:在使用的时候,出现了两个问题,导致无法挂载。

3.错误解决1:

Loading compiled-in X.509 certificates
[    1.754057] Speaker enable pin(145) request ok
[    1.758696] ingenic-x2660-halley sound_x2600e_cdc: snd_soc_register_card failed -517
[    1.767023] Speaker enable pin(145) request ok
[    1.771690] ingenic-x2660-halley sound_x2600e_cdc: snd_soc_register_card failed -517

注册声卡时失败,错误码为 -517,即 EINVAL(无效的参数)。这通常意味着传递给函数的参数不正确,或者函数无法执行所请求的操作
[    1.780066] ubi0: attaching mtd2
[    1.783665] ubi0 error: validate_ec_hdr: bad VID header offset 512, expected 2048
[    1.791437] ubi0 error: validate_ec_hdr: bad EC header

函数检测到VID(Volume Identifier)头部偏移不正确(实际为512,但期望为2048),并且EC(Erase Counter)头部也是坏的。这通常意味着UBI卷的数据可能已损坏,或者UBI卷在格式化或创建时发生了错误。
[    1.796747] Erase counter header dump:
[    1.800658]  magic          0x55424923
[    1.804528]  version        1
[    1.807602]  ec             0
[    1.810678]  vid_hdr_offset 512
[    1.813918]  data_offset    2048
[    1.817246]  image_seq      839296234
[    1.821066]  hdr_crc        0x6411217b
[    1.824934] erase counter header hexdump:
[    1.829095] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.10.186 #22
[    1.835474] Stack : 80ad0000 00000000 00000000 00000000 809f5200 8184e800 00000000 80098ad0
[    1.844127]         00000000 00000000 00000000 f4a4a03a 80ce1c54 00000001 80ce1be8 f4a4a03a
[    1.852776]         00000000 00000000 809c7100 80ce1aa0 000000f3 80ce1ab4 00000000 00002008
[    1.861421]         316afcf7 80ce1ab3 ffffffff 00000030 80ac0000 00000000 00000000 809c0000
[    1.870063]         00000000 811a5000 55424923 8184e800 00000000 00000000 00000000 80b70000
[    1.878706]         ...
[    1.881235] Call Trace:
[    1.883766] [<8001f558>] show_stack+0x94/0x12c
[    1.888364] [<808ac548>] dump_stack+0xac/0xe8
[    1.892868] [<80555ed8>] validate_ec_hdr+0xd8/0x12c
[    1.897909] [<80556e90>] ubi_io_read_ec_hdr+0x32c/0x3a0
[    1.903308] [<8055db84>] ubi_attach+0x250/0x17fc
[    1.908078] [<8054efc8>] ubi_attach_mtd_dev+0x708/0xee4
[    1.913476] [<80b2f6bc>] ubi_init+0x1c0/0x274
[    1.917976] [<800106d8>] do_one_initcall+0x50/0x1e8
[    1.923017] [<80b14f38>] kernel_init_freeable+0x224/0x2b4
[    1.928596] [<808af994>] kernel_init+0x14/0x104
[    1.933284] [<

解决修正: mkfs.ubifs -d ./target -e 0x1f800 -c 2048 -m 0x800 -x lzo  -o rootfs.ubifs
修正:
mkfs.ubifs -r ./target -o rootfs.ubifs -m 2048 -e 126976 -c 560

ubinize -o rootfs.ubi -m 0x800 -p 0x20000 -s 512 ubinize.cfg
修正:
ubinize -o rootfs.ubi -m 2048 -p 128KiB  ubinize.cfg

4 错误解决:

[    1.790175] ubi0: attaching mtd2  系统尝试附加MTD设备mtd2到UBI设备ubi0。
[    1.950564] ubi0: scanning is finished  UBI扫描mtd2的过程已完成
[    1.958117] ubi0 error: vtbl_check: too large reserved_pebs 826, good PEBs 768

[  解释:UBI在检查卷表时遇到错误。具体来说,预留的物理擦除块(PEBs)数量太大(826个),但是可用的好的PEBs数量只有768个。这导致卷表检查失败,错误码为9。]
[    1.965617] ubi0 error: vtbl_check: volume table check failed: record 0, error 9
[    1.973271] Volume table record 0 dump:
[    1.977231]  reserved_pebs   826
[    1.980581]  alignment       1
[    1.983735]  data_pad        0
[    1.986881]  vol_type        1
[    1.990039]  upd_marker      0
[    1.993186]  name_len        6
[    1.996331]  name            rootfs
[    1.999928]  crc             0x39a49ffc
[    2.004076] ubi0 error: ubi_attach_mtd_dev: failed to attach mtd2, error -22
[    2.011407] UBI error: cannot attach mtd2
由于前面的卷表检查错误,UBI无法附加mtd2设备,错误码为-22(EINVAL即无效的参数)
[    2.015557] ubi0: attaching mtd3
[    2.222953] ubi0: scanning is finished
[    2.232183] ubi0: attached mtd3 (name "userdata", size 151 MiB)
[    2.238319] ubi0: PEB size: 131072 bytes (128 KiB), LEB size: 126976 bytes
[    2.245451] ubi0: min./max. I/O unit sizes: 2048/2048, sub-page size 2048
[    2.252497] ubi0: VID header offset: 2048 (aligned 2048), data offset: 4096
[    2.259693] ubi0: good PEBs: 1208, bad PEBs: 0, corrupted PEBs: 0
[    2.266005] ubi0: user volume: 0, internal volumes: 1, max. volumes count: 128
[    2.273482] ubi0: max/mean erase counter: 1/1, WL threshold: 4096, image sequence number: 858485108
[    2.282843] ubi0: available PEBs: 1164, total reserved PEBs: 44, PEBs reserved for bad PEB handling: 40
[    2.292576] ubi0: background thread "ubi_bgt0d" started, PID 828
[    2.299183] input: gpio_keys as /devices/platform/gpio_keys/input/input0
[    2.306809] Speaker enable pin(145) request ok
[    2.311546] ingenic-x2660-halley sound_x2600e_cdc: snd_soc_register_card failed -517
[    2.320002] ALSA device list:
[    2.323169]   No soundcards found.
[    2.327008] VFS: Cannot open root device "ubi0:rootfs" or unknown-block(0,0): error -19
[    2.335329] Please append a correct "root=" boot option; here are the available partitions:
[    2.344017] 0100

修正:vol_size=70MiB ,一开始给的200MiB、100MiB,过大,导致nandflash没有剩余空间了! 

  • 14
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaoxilang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值