1、第1次将“rootfs”打包
1)、打开第1个终端,准备在“mnt”目录下创建挂载目录“rootfs”;
输入“ls回车”
输入“cd /mnt回车”
输入“ls回车”,查看“mnt”目录下的文件和文件夹
输入“sudo mkdir rootfs回车”,在“mnt”目录下新建一个“rootfs”
输入密码“123456回车”
输入“ls回车”,查看“mnt”目录下的文件和文件夹
2)、打开第2个终端,准备在“/linux/rootfs”目录下创建磁盘“rootfs.ext4”
输入“ls回车”
输入“cd linux回车”,切换到“linux”目录
输入“ls回车”,查看“linux”目录下的文件和文件夹
输入“mkdir rootfs回车”,新建“rootfs”目录
输入“ls回车”,查看“linux”目录下的文件和文件夹
输入“cd rootfs回车”,切换到“rootfs”目录
输入“ls回车”,查看“/home/zgq/linux/rootfs”目录下的文件和文件夹
输入“dd if=/dev/zero of=rootfs.ext4 bs=1M count=1024回车”,分配1G空间给“rootfs.ext4”
输入“mkfs.ext4 -L rootfs rootfs.ext4回车”,将“rootfs”格式化
输入“ls -l回车”,查看“rootfs”目录下的文件和文件夹
“rootfs.ext4”有1073741824个字节=1G字节
3)、挂载磁盘
输入“sudo mount rootfs.ext4 /mnt/rootfs/回车”,将“rootfs.ext4”挂载在“/mnt/rootfs/”目录下
4)、回到第1个打开的终端,查看是否挂载成功;
输入“cd rootfs/回车”,切换到“/mnt/rootfs/”
输入“ls回车”,查看“rootfs”目录下的文件和文件夹
5)、准备打包的文件,将“/home/zgq/linux/nfs/rootfs/”目录下的“所有文件和文件夹”拷贝到“/mnt/rootfs/”的目录中
回到第2个打开的终端,输入“cd /home/zgq/linux/nfs/rootfs/回车”,切换到“/home/zgq/linux/nfs/rootfs/”目录
输入“ls回车”,查看“rootfs”目录下的文件和文件夹
输入“sudo cp * /mnt/rootfs/ -drf 回车”,执行拷贝
6)、回到第1个打开的终端,卸载磁盘
输入“ls回车”,查看“rootfs”目录下的文件和文件夹,发现该文件夹有新文件
输入“cd ..回车”,返回到“mnt”目录
输入“ls回车”,查看“mnt”目录下的文件和文件夹
输入“sudo umount rootfs回车”卸载掉“rootfs”
输入密码“123456回车”
输入“ls回车”,查看“mnt”目录下的文件和文件夹
输入“cd rootfs回车”,切换到“rootfs”目录
输入“ls回车”,查看“rootfs”目录下的文件和文件夹,发现该文件夹为空;
7)、回到第2个打开的终端,查看打包好的文件
输入“cd /home/zgq/linux/rootfs回车”,切换到“/home/zgq/linux/rootfs”目录
输入“ls回车”,查看“rootfs”目录下的文件和文件夹
这个rootfs.ext4就是打包好的文件
8)、使用FileZilla将“rootfs.ext4”下载到“windows”中
9)、将“rootfs.ext4”拷贝到“C:\Program Files\STMicroelectronics\images\my-tfa”目录中
2、将“bootfs”重新打包
1)、准备打包文件:
输入“cd /home/zgq/linux/atk-mp1/linux/my_linux/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回车”,执行文件拷贝
查看目录下的“uImage”和“stm32mp157d-atk.dtb”有多少字节:
输入“cd /home/zgq/linux/atk-mp1/linux/bootfs/回车”切换到“/home/zgq/linux/atk-mp1/linux/bootfs/”目录
输入“ls -l回车”,列出“bootfs”目录下的文件和文件夹
输入“dd if=/dev/zero of=bootfs.ext4 bs=1M count=10回车”
使用“dd命令”创建一个名为“bootfs.ext4”的磁盘;
“of”指定磁盘名字为“bootfs.ext4”;
“bs”指定磁盘输入/输出块大小为1MB;
“count”指定磁盘的块数量为 10个;
输入“mkfs.ext4 -L bootfs bootfs.ext4回车”
使用“mkfs.ext4”将“bootfs.ext4磁盘”格式化为“ext4”格式。
输入“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/”目录中;
输入“sudo umount /mnt/bootfs回车”,使用“umount”卸载掉“bootfs”
输入“ls -l回车”,列出“bootfs”目录下的文件和文件夹
2)、使用FileZilla将“bootfs.ext4”下载到“windows”中
3)、将“bootfs.ext4”拷贝到“C:\Program Files\STMicroelectronics\images\my-tfa”目录中
3、使用“Notepad++”修改“tf-a.tsv”
1)、修改后,见下图:
2)、保存“tf-a.tsv”,关闭文件。
4、烧录
1)、关闭虚拟机,防止开发板连接到虚拟机
2)、将开发板上拨码开关拨到“000”位置
3)、将USB导线连接电脑的USB3.0接口,另外一端连接开发板的USB OTG接口;
4)、将USB导线连接电脑的USB3.0接口,另外一端连接到开发板的USB TTL接口;
5)、双击“STM32CubeProgrammer”图标
6)、选择上图中的USB,然后点击“Connect”
7)、点击“刷新”,直到出现USB1,表示连接成功。
8)、点击“Open file”,找到
“C:\Program Files\STMicroelectronics\images\my-tfa”目录下“tf-a.tsv”打开。
9)、点击“Browse”,打开
“C:\Program Files\STMicroelectronics\images\my-tfa”目录。
10)、点击“选择文件夹”
11)、点击“Download”
12)、点击“确定”
13)、将拨码开关设置为“010”
14)、按下开发板的“复位按钮”,重新启动开发板。
5、从EMMC启动测试
1)、在串口查看EMMC是否烧录了“uImage”和“stm32mp157d-atk.dtb”
输入“ext4ls mmc 1:2回车”查看EMMC分区2“内核镜像”有哪些文件和目录
发现“uImage”和“stm32mp157d-atk.dtb”
2)、输入“ext4ls mmc 1:3回车”查看EMMC分区3“根文件系统”有哪些文件和目录
3)、设置“bootcmd和bootargs”这两个环境变量,从EMMC启动linux系统
输入setenv bootcmd 'ext4load mmc 1:2 c2000000 uImage;ext4load mmc 1:2 c4000000 stm32mp157d-atk.dtb;bootm c2000000 - c4000000'
输入setenv bootargs 'console=ttySTM0,115200 root=/dev/mmcblk1p3 rootwait rw'
输入saveenv,保存“bootcmd和bootargs”的值
输入boot,启动 Linux 系统
4)、查看运行结果:
mmcblk0: p1
Waiting for root device /dev/mmcblk1p3...
mmc1: new high speed MMC card at address 0001
mmcblk1: mmc1:0001 8GTF4R 7.28 GiB
mmcblk1boot0: mmc1:0001 8GTF4R partition 1 4.00 MiB
mmcblk1boot1: mmc1:0001 8GTF4R partition 2 4.00 MiB
mmcblk1rpmb: mmc1:0001 8GTF4R partition 3 512 KiB, chardev (242:0)
mmcblk1: p1 p2 p3
EXT4-fs (mmcblk1p3): recovery complete
EXT4-fs (mmcblk1p3): mounted filesystem with ordered data mode. Opts: (null)
VFS: Mounted root (ext4 filesystem) on device 179:19.
devtmpfs: mounted
Freeing unused kernel memory: 1024K
Run /sbin/init as init process
Please press Enter to activate this console.
从MMC启动正确;
6、设置从网络启动
设置“bootcmd和bootargs”这两个环境变量,从网络启动linux系统
输入setenv bootcmd 'tftp c2000000 uImage;tftp c4000000 stm32mp157d-atk.dtb;bootm c2000000 - c4000000',设置从网络启动linux系统
输入“setenv bootargs 'console=ttySTM0,115200 root=/dev/nfs nfsroot=192.168.2.180:/home/zgq/linux/nfs/rootfs,proto=tcp rw ip=192.168.2.178:192.168.2.180:192.168.2.1:255.255.255.0::eth0:off'
回车”
输入: saveenv,保存bootcmd的值
输入: boot,启动 Linux 系统
7、busybox缺点:
1)、构建的根文件系统不完善。比如基本的 lib 库都是我们自己复制交叉编译器的,需要我们自己做很多其他工作。
2)、busybox本身支持的第三方库,软件很少。比如 tslib 就没有,那么就需要我们自己去下载源码,然后编译,移植。第三方依赖问题严重,很难处理。
3)、busybox,因为太简陋,功能少,不适合做项目开发,只适合于学习。
做项目,不适合使用busybox构建根文件系统。
没办法,还要学习其它构建根文件系统的工具。跟着正点原子,走点弯路,不知道他们为什么这么做。也许有好处,人生哪有那么一帆风顺的!!!