学习嵌入式第16天

这篇实训笔记详细记录了Linux操作系统的移植过程,包括烧录Uboot到TF卡,创建SD卡分区,格式化并烧写Uboot,以及通过SecureCRT设置串口通信。同时,介绍了如何烧写Linux内核镜像,对EMMC分区,并修改uboot环境变量。最后,提到了烧写完成后对系统文件的验证及必要的环境变量设置。
摘要由CSDN通过智能技术生成

第 16 天 实训笔记

一、回忆昨天的内容

作业:

flash : 掉电不丢失

flash 名称特点
ROM只读存储器
PROM只能写入一次
EPROM光可擦除
E2PROM点可擦除
Nor Flash片内执行
Nand Flash片内执行, 速度快

二、移植Liunx操作系统

2.1 烧录uboot

mkdir porting
cp ubootpak.bin ./

2.2 将Uboot烧录到TF卡

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fZbFnOeL-1658321322780)(图片1].png)

2.2.1 将 SD卡 插入到 读卡器

 SD卡 接入虚拟机, mount命令显示 SD卡 名称

ls /dev/sdb

 dev/sdb1 上挂载的是U盘设备, 需要将 SD卡 进行分区, 需要保留 SD卡 开头的512byte, 第一个扇区 中存放的是 分区表. 分区之后, 第513byte的位置放置 ubookpak.bin.

2.2.2 创建 SD卡 分区
  1. 将 SD卡 插入PC
  2. 确定 Linux 是否识别硬盘
    1. mount
    2. /dev/sdb 是整个 SD卡 设备
    3. /dev/sdb1 是 SD卡 中的第一个分区
    4. 注意: SD卡 分区之后, 需要将Uboot烧录到 /dev/sdb 文件中
  3. mount时, 找到类似于 /dev/sdb1 on /media/liuyang/Wilhelm type, 如果没有 /dev/sdb1的挂载信息, 不需要操作. 如果有/dev/sdb1的挂载信息, 需要卸载
  4. 为了给 SD卡 重新分区, 需要把挂载上的分区都卸载
    1. 法1 : umount /dev/sdb1
    2. 法2 : umount /media/liuyang/Wilhelm
  5. 为了确保卸载成功, 再执行一次 mount, 进行查询
  6. 重新建立分区
    1. 终端输入 sudo fdisk /dev/sdb
    2. 进入命令行Command (m for help), 输入p, 查看SD卡分区情况
    3. 输入d, 删除分区
    4. 输入p, 确定删除情况
    5. 输入n, 新建一个分区, 会提示 主分区 还是 扩展分区
    6. 输入p, 创建一个 主分区
    7. 分区号, 直接选择默认分区号–按Enter
    8. 提示为First sector(...):, 键入311162, 意为“第一个分区大小, 选择1%”
    9. 按下Enter
    10. 提示:Do you want to remove to signature?, 选择 Y
    11. 输入p, 显示 Type 为 Linux
    12. 输入t, 格式化成 fat32格式
    13. 输入L, 意为 查看所有的 分区类型
    14. 输入b, 选择 fat32格式
    15. 输入p, 重新确认 Type 为 W95 FAT32
    16. 输入w, 保存设置并退出
2.2.3 给 SD卡 新建的分区进行 格式化
  1. 展示系统分区: sudo fdisk -l
  2. 重新格式化: sudo mkfs.vfat -F 32 /dev/sdb1 -n Wilhelm
  3. 同步操作: sync
  4. 把 SD卡 从PC中拔掉
2.2.4 烧写 Uboot

 执行dd命令烧写 Uboot

  1. 将 SD卡 连接到 Linux
  2. 切换到 ubookpak.bin 所在目录
  3. 执行dd命令烧写
    • sudo dd if=ubookpak.bin of=/dev/sdb seek=1
    • 输入的文件名if=文件名
    • 输出的文件名of=文件名
    • 从输出文件开头跳过 Block 个块后再复制seek=block
  4. 拔出 SD卡, 插入 开发板SD0插槽中, 观察试验现象
2.2.5 安装串口工具

  Windows: Secure CRT 的 软件包
  路径:easthome_proting\ARM环境\串口工具\SecureCRT\SecureCRT.exe
  安装好软件包之后, 打开Secure CRT, 设置参数. 点击connect, 重启开发板并观察试验现象

  1. 打开设备管理器 ---->端口 ---->comx
  2. 打开Secure CRT, 点击快速连接, 选择对应的 com口, Serial, 115200, … 硬件流控不选, 点击连接
  3. 重启开发板, 观察试验现象

 串口线: 用于打印调试

2.3 烧写 Linux内核 的镜像

Liunx内核 官网: http://www.kernel.org

2.3.1 获取内核的镜像文件

cp /mnt/hgfs/easthome_porting/fastboot/uImage ./ and cp /mnt/hgfs/easthome_porting/fastboot/rootfs_ext4.img ./, 之后用 fastboot.exe 烧录
 用 USA_OTG 连接开发板和上位机

2.3.2 烧写文件

  将 uImage 和 rootfs_ext4.img烧写到 EMMC 之前, 先将 EMMC 分区
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2tYB9Eox-1658321322781)(图片2].png)

  1. 进去下位机的 uboot 命令行
  2. fdisk 2 2 0x100000:0x4000000 0x4100000:0x2f200000
    • 参数: 第一个 2 明确:TF卡, EMMC 硬件特性一模一样, 通称MMC
    • 参数: 第一个 0 代表对 SD0 卡槽上的设备进行分区
    • 参数: 第一个 1代表对SD1卡槽上的设备进行分区
    • 参数: 第一个 2代表对emmc进行分区
    • 参数: 第二个2 表示要分两个区, 分别是uImage and rootfs 的分区
    • --------------------------------------------------------
    • 指定uImage分区
    • 起始地址 : 0x100000
    • 偏移: 0x4000000
    • --------------------------------------------------------
    • 指定 rootfs 的分区
    • 起始地址: 0x410000
    • 偏移: 0x2f200000
  3. 重启开发板, 进入 uboot 命令行, 输入print/printenv
  4. 输入 re 命令重启
  5. 利用 OTG_USB 烧录 uImage and rootfs
    1. 安装驱动: fastboot fastboot驱动安装.docx
    2. 在 uboot 的命令行输入 fastboot, 开发板会提示
    3. Windows中, 打开终端
      1. 输入d:and cd easthome_porting
      2. 输入cd fastboot
      3. 进入到uImage and rootfs_ext4.img检查uImage, rootfs_ext4.img, fastboot,exe
      4. 烧录uImage:输入 fastboot flash boot uImage
      5. 烧录跟文件系统: 输入fastboot flash system rootfs_ext4.img
        注意:一旦烧写完毕, 立即拔掉USB_OTG

至此, 三大系统文件烧写完毕.

2.3.3 修改两个必要的环境变量

uboot 里面有两个必要的环境变量;
bootargs: 设置 bootargs 环境变量给 Liunx内核 传参
bootcmd: 当 uboot 启动, 3, 2, 1读秒的时候, 如果倒计时没有被中断, 倒计时为0, uboot 会启 bootcmd 中的命令.

重启下位机, 进入 uboot 的命令:

setenv bootcmd mmc read 0x48000000
0x800 0x3000 ;bootm 0x48000000
saveenv

mmc read: uboot 的命令, 将 emmc 中的数据读取到内存中
0x48000000: 读取到内存的起始地址
0x800: 从 EMMC 的偏移多少的扇区的位置, 开始拷贝
0x3000: 从 EMMC 中读取的数据的大小(6M)
\;: 表示换行
bootm : 从内存 0x48000000 的位置启动 Liunx 内存

bootargs:setenv bootargs root=/dev/mmcblk0p2 init=/linuxrc console=ttySAC0,115200 maxcpus=1 lcd=wy070ml tp=gslx680-linux and saveenv, 之后 rebuit

/dev/mmcblk0p2: emmc 中的第二个分区
/linuxrc: 一号进程对应的设备文件
ttyS0, 115200 : 控制台
maxcpus: 启动 uboot 时使用的 CPU 核数


作业: 1M 4M 16M 32M 64M 100M 对应的16进制
答案:

1M <=> 0x100000
4M <=> 0x400000
16M <=> 0x1000000
32M <=> 0x2000000
64M <=> 0x4000000
100M <=> 0x6400000

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值