OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3642|回复: 5

uboot移植,加载内核和设备树问题

[复制链接]

8

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
389
金钱
389
注册时间
2019-4-25
在线时间
99 小时
发表于 2021-10-21 09:50:49 | 显示全部楼层 |阅读模式
5金钱
imx6开发板,采用SD卡的方式启动时,根据官方手册指导要将zImage和设备树分别下载到SD卡的不同位置,命令如下:
  1. <p><p>sudo dd if=<zImageName> of=/dev/sd<partition> bs=512 seek=2048 conv=fsync && sync</p></p><p>
  2. </p><p><p>sudo dd if=<DevicetreeName>.dtb of=/dev/sd<partition> bs=512 seek=20480 conv=fsync</p></p>
复制代码
而在uboot加载zImage和设备树时,展开bootcmd最终为
  1. <p><p>fatload mmc 1:1 0x80800000 zImage</p></p><p>
  2. </p><p><p>fatload mmc 1:1 0x83000000 imx6ull-14x14-evk.dtb</p></p>
复制代码
含义为从 mmc1 的分区中读取 zImage 和 设备处 到DDR内存的相应位置处,然后加载内核。烧写zImage和设备树时直接烧写到了SD卡的绝对地址出,加载时却是从mmc的分区1加载的,这个烧写的位置和分区的对应关系在代码的哪里可以体现出来呢?为什么是从分区1加载呢?



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

120

帖子

0

精华

高级会员

Rank: 4

积分
813
金钱
813
注册时间
2021-2-26
在线时间
117 小时
发表于 2021-10-21 14:01:16 | 显示全部楼层
不对吧,官方手册是哪个文件?
fatload是从fat32分区中读写的,你再去看mfgtool中的ucl2.xml,针对SD卡部分,只有uboot是写在绝对位置的,kernel和dtb都是先格式化fat32分区,在把文件直接copy到fat32分区里去的。

  1.         <!-- burn uboot -->
  2.         <CMD state="Updater" type="push" body="$ dd if=/dev/zero of=/dev/mmcblk0 bs=1k seek=768 conv=fsync count=8">clear u-boot env</CMD>
  3.         <CMD state="Updater" type="push" body="send" file="files/boot/u-boot.imx" ifdev="MX6ULL">Sending u-boot.bin</CMD>
  4.         <CMD state="Updater" type="push" body="$ dd if=$FILE of=/dev/mmcblk0 bs=1k seek=1 conv=fsync">write u-boot.bin to sd card</CMD>

  5.         <!-- format and mount boot partition -->
  6.         <CMD state="Updater" type="push" body="$ while [ ! -e /dev/mmcblk0p1 ]; do sleep 1; echo "waiting..."; done ">Waiting for the partition ready</CMD>
  7.         <CMD state="Updater" type="push" body="$ mkfs.vfat -F 32 -n "boot" /dev/mmcblk0p1">Formatting rootfs partition</CMD>
  8.         <CMD state="Updater" type="push" body="$ mkdir -p /mnt/mmcblk0p1"/>
  9.         <CMD state="Updater" type="push" body="$ mount -t vfat /dev/mmcblk0p1 /mnt/mmcblk0p1"/>

  10.     <!-- burn zImage -->
  11.     <CMD state="Updater" type="push" body="send" file="files/boot/zImage">Sending kernel</CMD>
  12.     <CMD state="Updater" type="push" body="$ cp $FILE /mnt/mmcblk0p1/zImage">write kernel image to sd card</CMD>

  13.     <!-- burn dtb -->
  14.     <CMD state="Updater" type="push" body="send" file="files/boot/imx6ull-alientek-emmc.dtb" ifdev="MX6ULL">Sending Device Tree file</CMD>
  15.     <CMD state="Updater" type="push" body="$ cp $FILE /mnt/mmcblk0p1/imx6ull-alientek-emmc.dtb" ifdev="MX6ULL">write device tree to sd card</CMD>

  16.     <CMD state="Updater" type="push" body="$ sleep 1">delay</CMD>
  17.     <CMD state="Updater" type="push" body="$ sync">Sync...</CMD>
  18.     <CMD state="Updater" type="push" body="$ umount /mnt/mmcblk0p1">Unmounting vfat partition</CMD>

  19.     <!-- format and mount rootfs partition -->
  20.     <CMD state="Updater" type="push" body="$ mkfs.ext3 -F -j -L "rootfs" /dev/mmcblk0p2">Formatting rootfs partition</CMD>
  21.     <CMD state="Updater" type="push" body="$ mkdir -p /mnt/mmcblk0p2"/>
  22.     <CMD state="Updater" type="push" body="$ mount -t ext3 /dev/mmcblk0p2 /mnt/mmcblk0p2"/>

  23.     <!-- burn rootfs -->
  24.     <CMD state="Updater" type="push" body="pipe tar -jxv -C /mnt/mmcblk0p2" file="files/filesystem/rootfs.tar.bz2" ifdev="MX6ULL">Sending and writting rootfs</CMD>
  25.     <CMD state="Updater" type="push" body="frf">Finishing rootfs write</CMD>
  26.     <CMD state="Updater" type="push" body="$ sleep 1">delay</CMD>
  27.     <CMD state="Updater" type="push" body="$ sync">Sync...</CMD>
  28.     <CMD state="Updater" type="push" body="$ umount /mnt/mmcblk0p2">Unmounting rootfs partition</CMD>
  29.     <CMD state="Updater" type="push" body="$ echo Update Complete!">Done</CMD>

复制代码



回复

使用道具 举报

8

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
389
金钱
389
注册时间
2019-4-25
在线时间
99 小时
 楼主| 发表于 2021-10-21 14:43:48 | 显示全部楼层
jckimi 发表于 2021-10-21 14:01
不对吧,官方手册是哪个文件?
fatload是从fat32分区中读写的,你再去看mfgtool中的ucl2.xml,针对SD卡部 ...

谢谢你,我看的手册是《i.MX Linux &reg; &reg; User's Guide, Rev. L5.4.47_2.2.0, 2 November 2020》,在烧写zImage和设备树到SD前,确实格式化了SD卡,但是手册介绍的是写到绝对地址处。
  1. 4.3.5 Copying the kernel image and DTB file
  2. This section describes how to load the kernel image and DTB when the full SD card image is not used. The pre-built SD card image
  3. uses the VFAT partition for storing kernel image and DTB, which requires a VFAT partition that is mounted as a Linux drive and
  4. the files are simply copied into it. This is the preferred method.
  5. Another method that can be used is for users to put the kernel image and DTB to the fixed raw address of the SD card by using the
  6. dd command. The later method needs to modify the U-Boot default environment variables for loading the kernel image and DTB.
  7. Default: VFAT partition
  8. 1. Format partition 1 on the card as VFAT with this command:
  9. $ sudo mkfs.vfat /dev/sdx1
  10. 2. Mount the formatted partition with this command:
  11. $ mkdir mountpoint
  12. $ sudo mount /dev/sdx1 mountpoint
  13. 3. Copy the zImage and *.dtb files to the mountpoint by using cp . The device tree names should match the one used by the
  14. variable specified by U-Boot. Unmount the partition with this command:
  15. $ sudo umount mountpoint
  16. Alternative: Pre-defined raw address
  17. The following command can be used to copy the kernel image to the SD/MMC card:
  18. For i.MX 6 and i.MX7, use this command:
  19. $ sudo dd if=zImage_imx_v7_defconfig of=/dev/sdx bs=512 seek=2048 conv=fsync
  20. For i.MX 8, use this command:
  21. sudo dd if=Image-imx8qmsabreauto.bin of=/dev/sdx bs=512 seek=2048 conv=fsync
  22. Each of them copies the kernel to the media at offset 1 MB (bs x seek = 512 x 2048 = 1 MB). The file zImage_imx_v7_defconfig
  23. refers to the zImage file created when using the imx_v7_defconfig configuration file, which supports both i.MX 6 and i.MX 7 SoCs.
  24. The i.MX DTB image can be copied by using the copy command and copying the file to the 2nd partition or the following commands
  25. copy an i.MX DTB image to the SD/MMC card by using dd command.
  26. Choose a command for your board:
  27. $ sudo dd if=zImage-imx6qp-sabreauto.dtb of=/dev/sdx bs=512 seek=20480 conv=fsync
  28. $ sudo dd if=zImage-imx6qp-sabresd.dtb of=/dev/sdx bs=512 seek=20480 conv=fsync
  29. $ sudo dd if=zImage-imx6q-sabreauto.dtb of=/dev/sdx bs=512 seek=20480 conv=fsync
  30. $ sudo dd if=zImage-imx6q-sabresd.dtb of=/dev/sdx bs=512 seek=20480 conv=fsync
  31. $ sudo dd if=zImage-imx6sl-evk.dtb of=/dev/sdx bs=512 seek=20480 conv=fsync
  32. $ sudo dd if=zImage-imx7d-sdb.dtb of=/dev/sdx bs=512 seek=20480 conv=fsync
复制代码
回复

使用道具 举报

8

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
389
金钱
389
注册时间
2019-4-25
在线时间
99 小时
 楼主| 发表于 2021-10-21 14:46:45 | 显示全部楼层
jckimi 发表于 2021-10-21 14:01
不对吧,官方手册是哪个文件?
fatload是从fat32分区中读写的,你再去看mfgtool中的ucl2.xml,针对SD卡部 ...

另外,我还想问一下
fatload mmc 1:1 0x80800000 zImage
这个0x80800000这个地址是从哪里得到的?在代码的哪部分能体现出来?谢谢
回复

使用道具 举报

2

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2020-11-25
在线时间
20 小时
发表于 2021-10-22 10:37:00 | 显示全部楼层
a314825348 发表于 2021-10-21 14:46
另外,我还想问一下
fatload mmc 1:1 0x80800000 zImage
这个0x80800000这个地址是从哪里得到的?在代 ...

0x80800000这个是内存地址吧,没有特别要求
回复

使用道具 举报

8

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
389
金钱
389
注册时间
2019-4-25
在线时间
99 小时
 楼主| 发表于 2021-10-24 10:26:18 | 显示全部楼层
LIMIGO 发表于 2021-10-22 10:37
0x80800000这个是内存地址吧,没有特别要求

好的,谢谢
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 14:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表