linux – uboot将内核写入mmc分区
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了linux – uboot将内核写入mmc分区,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4191字,纯文字阅读大概需要6分钟。
内容图文
![linux – uboot将内核写入mmc分区](/upload/InfoBanner/zyjiaocheng/957/a3b35250fdb740d186f251080bb09702.jpg)
我想将一个带有U-Boot的Linux内核编写到i.MX6板上的eMMC存储的mmc hwpartition中:
TX6UL U-Boot > mmc info
Device: FSL_SDHC
Manufacturer ID: 11
OEM: 100
Name: 004G6
Tran Speed: 52000000
Rd Block Len: 512
MMC version 5.0
High Capacity: Yes
Capacity: 8 MiB
Bus Width: 4-bit
Erase Group Size: 4 MiB
HC WP Group Size: 4 MiB
User Capacity: 8 MiB WRREL
Boot Capacity: 2 MiB ENH
RPMB Capacity: 512 KiB ENH
GP1 Capacity: 8 MiB WRREL
GP2 Capacity: 1.8 GiB ENH WRREL
通用hwpartition GP1旨在用于内核.通常使用以下命令来编写映像(假设tftp-server正在运行并将映像托管为文件uImage_txul):
TX6UL U-Boot > tftp ${loadaddr} uImage_txul
TX6UL U-Boot > mmc write ${loadaddr} 0xXXXX 0xYYYY
如何找到所需的地址0xXXXX 0xYYYY将图像写入hwpartition GP1?
解决方法:
将u-boot烧录到mmc的简短答案可能就是
tftp ${loadaddr} u-boot.bin
mmc partconf 0 ${emmc_boot_ack} ${emmc_boot_part} 1
mmc write ${fileaddr} 0 800
mmc partconf 0 ${emmc_boot_ack} ${emmc_boot_part} 0
但这取决于你如何设置mmc.此命令将从${fileaddr}写入1048576(0x800 * 512)个字节到从地址0开始的mmc.
有关编写mmc的更长更完整的答案.假设您将按制造商建议的方式设置mmc.
| u-boot[0] | DT[0x680] | Kernel[0x800] | FS[0x8000] |
假设您已经拥有了所需的文件,如果没有,您可以使用Yocto构建这些文件.如果你愿意,我可以提供相关细节.
u-boot.bin, imx6ul-txul-0011.dtb, uImage, rootfs.tar.bz2, modules.tgz
让我们假设你已经至少侧载了u-boot,看起来你已经以某种方式运行了它.
首先你需要对mmc进行分区.您无法通过u-boot执行此操作,因此您需要设置网络启动.看来你已经有了一个包含文件的tftp服务器,你还需要设置一个nfs服务器并将rootfs提取到那里.假设您在/ nfsroot设置了nfs服务器文件系统.设置以下变量以启用net boot.
env default -a
env set bootdelay 3
env set serverip 192.168.1.99
env set nfs_server 192.168.1.99
env set ipaddr 192.168.1.90
env set netmask 255.255.255.0
env set bootfile uImage
env set nfsroot /nfsroot
env set boot_mode net
env set default_bootargs setenv bootargs init=/bin/sh console=ttymxc0,115200 ro debug panic=1 ${append_bootargs}
save
启动到Linux提示符并从那里运行
fdisk /dev/mmcblk0
和设置分区如下
Partition Start Cyl End Cyl Start Sector End Sector Type
1 33 512 2048 32767 0x0c
2 513 - 32768 - 0x83
切换回u-boot,您现在应该能够看到您的分区
> mmc part
Partition Map for MMC device 0 -- Partition Type: DOS
Part Start Sector Num Sectors UUID Type
1 2048 30720 00ee66ee-01 0c
2 32768 7700480 00ee66ee-02 83
注意,分区1从扇区2048开始,即0x800.分区2从32768开始,即0x8000.您现在应该看到这些数字的来源.
我们使用上面的命令更新了u-boot.bin,但请注意它也会覆盖设备表(DT).所以要更新DT,请使用
tftp ${fdtaddr} imx6ul-txul-0011.dtb
mmc partconf 0 ${emmc_boot_ack} ${emmc_boot_part} 1
mmc write ${fdtaddr} 0x680 80
mmc partconf 0 ${emmc_boot_ack} ${emmc_boot_part} 0
也可以使用这些命令设置环境变量${fdtsave},如果是这样,您可以使用
run fdtsave
要更新分区,您需要在Linux机器上创建磁盘映像,然后将它们tftp到TX6UL并使用mmc write命令进行刻录.要为第一个分区创建映像,可以在linux框中使用这些命令.
dd if=/dev/zero of=part1.image bs=15728640 count=0 seek=1
/sbin/mkfs -t vfat part1.image
sudo mkdir /mnt/mkpart
sudo mount -o loop part1.image /mnt/mkpart
cp uImage /mnt/mkpart/uImage
sudo umount /mnt/mkpart
然后在u-boot中
tftp ${loadaddr} part1.image
mmc write ${fileaddr} 800 7800
您可以使用u-boot查看分区的内容
> fatls mmc 0:1
3676512 uimage
1 file(s), 0 dir(s)
同样对于第二个分区,从你的linux框中使用类似的东西
dd if=/dev/zero of=part2.image bs=64M count=0 seek=1
/sbin/mkfs -t ext3 part2.image
sudo mkdir /mnt/mkpart
sudo mount -o loop part2.image /mnt/mkpart
sudo tar -C /mnt/mkpart -xjf rootfs.tar.bz2
sudo tar -C /mnt/mkpart -xzf modules.tgz
ln -s sbin/init /mnt/mkpart/linuxrc
sudo umount /mnt/mkpart
然后从u-boot
tftp ${loadaddr} part2.image
setexpr fs ${filesize} + 1ff
setexpr fs ${fs} / 200
mmc write ${fileaddr} 8000 ${fs}
如果要从u-boot中查看第二个分区的内容
> ext2ls mmc 0:2
要从新分区引导,请在引导参数中将init设置为normal
env set default_bootargs setenv bootargs init=/linuxrc console=ttymxc0,115200 ro debug panic=1 ${append_bootargs}
save
并且不要忘记更改分区ID或env变量以指向新文件系统.在这种情况下
env set rootpart_uuid 00ee66ee-02
save
希望这可以帮助.
内容总结
以上是互联网集市为您收集整理的linux – uboot将内核写入mmc分区全部内容,希望文章能够帮你解决linux – uboot将内核写入mmc分区所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。