本节主要学习系统镜像打包,然后将打包文件烧录到EMMC测试。
1、创建bootfs文件夹
1)、打开第1个终端
输入“ls回车”
输入“cd linux/回车”,切换到“linux”目录
输入“ls回车”,列出“linux”目录下的文件和文件夹
输入“cd atk-mp1/回车”,切换到“atk-mp1”目录
输入“ls回车”,列出“atk-mp1”目录下的文件和文件夹
输入“cd linux/回车”,切换到“linux”目录
输入“ls回车”,列出“linux”目录下的文件和文件夹
输入“mkdir bootfs回车”,创建“bootfs”目录
输入“ls回车”,列出“linux”目录下的文件和文件夹
2)、将“uImage”和“stm32mp157d-atk.dtb”拷贝到“bootfs”目录中
打开第2个终端
输入“ls回车”
输入“cd linux/回车”,切换到“linux”目录
输入“ls回车”,列出“linux”目录下的文件和文件夹
输入“cd atk-mp1/回车”,切换到“atk-mp1”目录
输入“ls回车”,列出“atk-mp1”目录下的文件和文件夹
输入“cd linux/回车”,切换到“linux”目录
输入“ls回车”,列出“linux”目录下的文件和文件夹
输入“cd my_linux/回车”,切换到“my_linux”目录
输入“ls回车”,列出“my_linux”目录下的文件和文件夹
输入“cd linux-5.4.31/回车”,切换到“linux-5.4.31”目录
输入“cp arch/arm/boot/uImage /home/zgq/linux/atk-mp1/linux/bootfs/ -f回车”,执行文件拷贝;
输入“cp arch/arm/boot/dts/stm32mp157d-atk.dtb /home/zgq/linux/atk-mp1/linux/bootfs/ -f回车”,执行文件拷贝
3)、回到打开的第1个终端
输入“cd bootfs/回车”切换到“bootfs”目录
输入“ls回车”,列出“bootfs”目录下的文件和文件夹
输入“ls -l回车”,列出“bootfs”目录下的文件和文件夹
可知“uImage”和“stm32mp157d-atk.dtb”合计为7.035M字节。
2、新建ext4格式磁盘
回到打开的第1个终端
输入“dd if=/dev/zero of=bootfs.ext4 bs=1M count=10回车”
使用“dd命令”创建一个名为“bootfs.ext4”的磁盘;
“of”指定磁盘名字为“bootfs.ext4”;
“bs”指定磁盘输入/输出块大小为1MB;
“count”指定磁盘的块数量为 10个;
因此,“bootfs.ext4磁盘”只能存放不超过10MB的文件,如果要存放的文件总大小超过10MB,那么就要适当调整count参数的大小。
输入“mkfs.ext4 -L bootfs bootfs.ext4回车”
使用“mkfs.ext4”将“bootfs.ext4磁盘”格式化为“ext4”格式。
输入“ls回车”,列出“bootfs”目录下的文件和文件夹
见下图:
3、在mnt目录下创建bootfs目录,用于挂载“bootfs.ext4磁盘”
1)、打开第3个终端
输入“cd /mnt回车”,切换到mnt目录
输入“sudo mkdir bootfs回车”,然后输入密码“123456回车”,就创建了“bootfs”目录
输入“ls回车”,列出“mnt”目录下的文件和文件夹
2)、回到打开的第1个终端
输入“sudo mount bootfs.ext4 /mnt/bootfs/回车”,
使用“mount命令”将“bootfs.ext4”磁盘挂载到“/mnt/bootfs”目录下;
输入密码“123456回车”
输入“sudo cp uImage stm32mp157d-atk.dtb /mnt/bootfs/回车”
将“uImage”和“stm32mp157d-atk.dtb”拷贝到“/mnt/bootfs/”目录中;
3)、回到打开的第3个终端
输入“cd bootfs/回车”,切换到“bootfs”目录
输入“ls回车”,列出“bootfs”目录下的文件和文件夹
4)、输入“cd ..回车”,退回到“mnt”目录
输入“sudo umount /mnt/bootfs回车”,使用“umount”卸载掉“bootfs”
5)、回到打开的第1个终端
输入“ls回车”,列出“/linux/atk-mp1/linux/bootfs”目录下的文件和文件夹
至此,“uImage”和“stm32mp157d-atk.dtb”就被打包到“bootfs.ext4”中。
6)、使用FileZilla将“bootfs.ext4”下载到“windows”中。
4、烧录到EMMC
1)、将“bootfs.ext4”拷贝到“C:\Program Files\STMicroelectronics\images\my-tfa”目录中
2)、使用“Notepad++”修改“tf-a.tsv”
修改后,见下图:
3)、保存“tf-a.tsv”
4)、关闭虚拟机,防止开发板连接到虚拟机
5)、将开发板上拨码开关拨到“000”位置
6)、将USB导线连接电脑的USB3.0接口,另外一端连接开发板的USB OTG接口;
7)、将USB导线连接电脑的USB3.0接口,另外一端连接到开发板的USB TTL接口;
8)、双击“STM32CubeProgrammer”图标
9)、选择上图中的USB,然后点击“Connect”
10)、点击“刷新”,直到出现USB1,表示连接成功。
11)、点击“Open file”,找到
“C:\Program Files\STMicroelectronics\images\my-tfa”目录下“tf-a.tsv”打开。
12)、点击“Browse”,打开
“C:\Program Files\STMicroelectronics\images\my-tfa”目录。
13)、点击“选择文件夹”
14)、点击“Download”
15)、点击“确定”
16)、将拨码开关设置为“010”
17)、按下开发板的“复位按钮”,重新启动开发板。
5、在串口查看EMMC是否烧录了“uImage”和“stm32mp157d-atk.dtb”
1)、输入“ext4ls mmc 1:2回车”查看“boot分区”有哪些文件和目录
发现“uImage”和“stm32mp157d-atk.dtb”
2)、通过设置环境变量bootcmd的值,从EMMC启动linux系统
出现“STM32MP>”时,输入setenv bootcmd 'ext4load mmc 1:2 c2000000 uImage;ext4load mmc 1:2 c4000000 stm32mp157d-atk.dtb;bootm c2000000 - c4000000',设置从EMMC启动linux系统
出现“STM32MP>”时,输入: saveenv,保存bootcmd的值
出现“STM32MP>”时,输入: boot回车,启动 Linux 系统
3)、烧录EMMC后,重新设置从网络启动linux系统
更新“tftpboot”目录中的“uImage”和“stm32mp157d-atk.dtb”
输入“ls回车”
输入“cd linux/回车”,切换到“linux”目录
输入“ls回车”,列出“linux”目录下的文件和文件夹
输入“cd atk-mp1/回车”,切换到“atk-mp1”目录
输入“ls回车”,列出“atk-mp1”目录下的文件和文件夹
输入“cd linux/回车”,切换到“linux”目录
输入“ls回车”,列出“linux”目录下的文件和文件夹
输入“cd my_linux/回车”,切换到“my_linux”目录
输入“ls回车”,列出“my_linux”目录下的文件和文件夹
输入“cd linux-5.4.31/回车”,切换到“linux-5.4.31”目录
输入“ls回车”,列出“linux-5.4.31”目录下的文件和文件夹
4)、输入“cp arch/arm/boot/uImage /home/zgq/linux/tftpboot/ -f回车”,执行文件拷贝;
输入“cp arch/arm/boot/dts/stm32mp157d-atk.dtb /home/zgq/linux/tftpboot/ -f回车”,执行文件拷贝
出现“STM32MP>”时,输入setenv bootcmd 'tftp c2000000 uImage;tftp c4000000 stm32mp157d-atk.dtb;bootm c2000000 - c4000000',设置从网络启动linux系统
出现“STM32MP>”时,输入: saveenv,保存bootcmd的值
出现“STM32MP>”时,输入: boot,启动 Linux 系统
下面还要解决:“VFS: Unable to mount root fs on unknown-block(0,0) ]”
提示内核崩溃,VFS(虚拟文件系统)不能挂载根文件系统,因为根文件系统目录不存在。
如果“根文件系统”构建好了,就意味着我们已经拥有一个完整的、可以运行的最小系统,这就是linux系统移植的最后一步。
学习linux很无聊,不是安装,就是修改,不停地移植。还要有用过实时操作系统的应用功底,此外,并是意志坚定。马拉松式的慢跑,肯定有很多人坚持不下来,这就是它很难学的原因吧。