第 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卡 分区
- 将 SD卡 插入PC
- 确定 Linux 是否识别硬盘
mount
/dev/sdb
是整个 SD卡 设备/dev/sdb1
是 SD卡 中的第一个分区- 注意: SD卡 分区之后, 需要将Uboot烧录到 /dev/sdb 文件中
- mount时, 找到类似于
/dev/sdb1 on /media/liuyang/Wilhelm type
, 如果没有/dev/sdb1
的挂载信息, 不需要操作. 如果有/dev/sdb1
的挂载信息, 需要卸载 - 为了给 SD卡 重新分区, 需要把挂载上的分区都卸载
- 法1 :
umount /dev/sdb1
- 法2 :
umount /media/liuyang/Wilhelm
- 法1 :
- 为了确保卸载成功, 再执行一次
mount
, 进行查询 - 重新建立分区
- 终端输入
sudo fdisk /dev/sdb
- 进入命令行
Command (m for help)
, 输入p
, 查看SD卡分区情况 - 输入
d
, 删除分区 - 输入
p
, 确定删除情况 - 输入
n
, 新建一个分区, 会提示 主分区 还是 扩展分区 - 输入
p
, 创建一个 主分区 - 分区号, 直接选择默认分区号–按
Enter
- 提示为
First sector(...):
, 键入311162
, 意为“第一个分区大小, 选择1%” - 按下
Enter
- 提示:
Do you want to remove to signature?
, 选择Y
- 输入
p
, 显示 Type 为 Linux - 输入
t
, 格式化成 fat32格式 - 输入
L
, 意为 查看所有的 分区类型 - 输入
b
, 选择 fat32格式 - 输入
p
, 重新确认 Type 为 W95 FAT32 - 输入
w
, 保存设置并退出
- 终端输入
2.2.3 给 SD卡 新建的分区进行 格式化
- 展示系统分区:
sudo fdisk -l
- 重新格式化:
sudo mkfs.vfat -F 32 /dev/sdb1 -n Wilhelm
- 同步操作:
sync
- 把 SD卡 从PC中拔掉
2.2.4 烧写 Uboot
执行dd
命令烧写 Uboot
- 将 SD卡 连接到 Linux
- 切换到 ubookpak.bin 所在目录
- 执行
dd
命令烧写sudo dd if=ubookpak.bin of=/dev/sdb seek=1
- 输入的文件名
if=文件名
- 输出的文件名
of=文件名
- 从输出文件开头跳过 Block 个块后再复制
seek=block
- 拔出 SD卡, 插入 开发板SD0插槽中, 观察试验现象
2.2.5 安装串口工具
Windows: Secure CRT 的 软件包
路径:easthome_proting\ARM环境\串口工具\SecureCRT\SecureCRT.exe
安装好软件包之后, 打开Secure CRT, 设置参数. 点击connect, 重启开发板并观察试验现象
- 打开设备管理器 ---->端口 ---->comx
- 打开Secure CRT, 点击快速连接, 选择对应的 com口, Serial, 115200, … 硬件流控不选, 点击连接
- 重启开发板, 观察试验现象
串口线: 用于打印调试
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)
- 进去下位机的 uboot 命令行
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
- 重启开发板, 进入 uboot 命令行, 输入
print
/printenv
- 输入
re
命令重启 - 利用 OTG_USB 烧录 uImage and rootfs
- 安装驱动: fastboot
fastboot驱动安装.docx
- 在 uboot 的命令行输入 fastboot, 开发板会提示
- Windows中, 打开终端
- 输入
d:
andcd easthome_porting
- 输入
cd fastboot
- 进入到uImage and rootfs_ext4.img检查uImage, rootfs_ext4.img, fastboot,exe
- 烧录uImage:输入
fastboot flash boot uImage
- 烧录跟文件系统: 输入
fastboot flash system rootfs_ext4.img
注意:一旦烧写完毕, 立即拔掉USB_OTG
- 输入
- 安装驱动: fastboot
至此, 三大系统文件烧写完毕.
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