Linux第64步_编译移植好的虚拟机文件

最好还是认真了解linux系统移植的整个过程,否则,可能会让你误入歧途。

1、编译移植好的tf-a

1)编译生成“tf-a-stm32mp157d-atk-trusted.stm32”

输入“cd /home/zgq/linux/atk-mp1/tfa/my-tfa/tf-a-stm32mp-2.2.r1/回车”,切换到“/home/zgq/linux/atk-mp1/tfa/my-tfa/tf-a-stm32mp-2.2.r1/”目录下;

输入“ls回车”,列出“/home/zgq/linux/atk-mp1/tfa/my-tfa/tf-a-stm32mp-2.2.r1/”目录下所有的文件和文件夹;

输入“make -f ../Makefile.sdk clean”,清除以前的编译;

输入“make -f ../Makefile.sdk all回车”, 执行编译, '-f'的意思是重新指定Makefile。

输入“cd /home/zgq/linux/atk-mp1/tfa/my-tfa/build/trusted/回车

切换到“/home/zgq/linux/atk-mp1/tfa/my-tfa/build/trusted/”目录

输入“ls -l回车

列出“/home/zgq/linux/atk-mp1/tfa/my-tfa/build/trusted/”目录下所有的文件和文件夹;发现生成新的tf-a-stm32mp157d-atk-trusted.stm32

注意:立即使用“FileZilla”将它下载到“windows”中。否则在编译生成tf-a-stm32mp157d-atk-serialboot.stm32”时,生成的“tf-a-stm32mp157d-atk-trusted.stm32”会被清除了

2)、编译生成“tf-a-stm32mp157d-atk-serialboot.stm32”

输入“cd /home/zgq/linux/atk-mp1/tfa/my-tfa/tf-a-stm32mp-2.2.r1/回车”,切换到“/home/zgq/linux/atk-mp1/tfa/my-tfa/tf-a-stm32mp-2.2.r1/”目录下;

输入“ls回车”,列出“/home/zgq/linux/atk-mp1/tfa/my-tfa/tf-a-stm32mp-2.2.r1/”目录下所有的文件和文件夹;

输入“make -f ../Makefile.sdk clean”,清除以前的编译;

输入“make -f ../Makefile.sdk TFA_DEVICETREE=stm32mp157d-atk TF_A_CONFIG=serialboot ELF_DEBUG_ENABLE='1' all”,

执行编译, '-f'的意思是重新指定Makefile。这句非常重要,单独编译生成“tf-a-stm32mp157d-atk-serialboot.stm32”,不能使用“make -f ../Makefile.sdk all回车”来编译,否则在烧录程序时串口会报“Boot interface 6 not supported”问题

输入“cd /home/zgq/linux/atk-mp1/tfa/my-tfa/build/serialboot/回车

切换“/home/zgq/linux/atk-mp1/tfa/my-tfa/build/serialboot/”目录下

输入“ls –l tf-a-stm32mp157d-atk-serialboot*回车”,列出当前目录下所有以“tf-a-stm32mp157d-atk-serialboot”开头的的文件和文件夹。发现生成了新的“tf-a-stm32mp157d-atk-serialboot.stm32

注意:立即使用“FileZilla”将它下载到“windows”中

至此,我们完成了tf-a的编译。

2、编译移植好的u-boot

1)、输入“cd /home/zgq/linux/atk-mp1/uboot/my_uboot/回车”,切换到“/home/zgq/linux/atk-mp1/uboot/my_uboot/”目录下

输入“ls回车”,查看“/home/zgq/linux/atk-mp1/uboot/my_uboot/”目录下的所有文件和文件夹

2)、输入“vi stm32mp157d_alientek.sh回车

打开脚本文件“stm32mp157d_alientek.sh”内容如下:

#!/bin/bash

make stm32mp15_atk_trusted_defconfig

#使用stm32mp15_atk_trusted_defconfig覆盖“.config”

make DEVICE_TREE=stm32mp157d-atk all -j8

3)、按“ESC”,输入“:q!”不保存退出

4)、输入“make distclean”,手动清理工程;

5)、输入./stm32mp157d_alientek.sh,记住“make menuconfig

6)、输入“ls -l u-boot.stm32回车”,查看“u-boot.stm32”文件,发现生成了新的“u-boot.stm32

7)、使用“FileZilla”将它下载到“windows”中

至此,我们完成了u-boot的编译。

3、编译移植好的linux系统

1)、输入“cd /home/zgq/linux/atk-mp1/linux/linux-5.4.31/回车”,切换到“/home/zgq/linux/atk-mp1/linux/linux-5.4.31/”目录下

2)、输入“ls回车”,查看“/home/zgq/linux/atk-mp1/linux/linux-5.4.31/”目录下的所有文件和文件夹

记住:“stm32mp1_atk_defconfig”位于“/home/zgq/linux/atk-mp1/linux/linux-5.4.31/arch/arm/configs”

记住:“make menuconfig”用于打开linux内核图形化配置界面

3)、输入“vi stm32mp157d_alientek.sh回车

打开脚本文件“stm32mp157d_alientek.sh”内容如下:

#!/bin/sh

make distclean    #清理工程

make stm32mp1_atk_defconfig

#使用”stm32mp1_atk_defconfig”覆盖“.config”

make menuconfig

#打开linux内核图形化配置界面,若不用修改,则两次“ESC键

make uImage dtbs LOADADDR=0XC2000040 -j8

#指定编译“Image”和“dtbs”,并指定装载的起始地址为0XC2000040,j8表示指定采用8线程执行。

4)、按“ESC”,输入“:q!”不保存退出

5)、输入“./stm32mp157d_atk.sh回车”,执行脚本编译

6)、弹出“图形化配置界面”再按两次“ESC

7)、等待编译完成

8)、输入“ls arch/arm/boot/uImage -l

查看是否生成了新的“uImage”文件

9)、输入“ls arch/arm/boot/dts/stm32mp157d-atk.dtb -l

查看是否生成了新的“stm32mp157d-atk.dtb”文件

拷贝输出的文件:

10)、输入“cp arch/arm/boot/uImage /home/zgq/linux/atk-mp1/linux/bootfs/ -f回车”,执行文件拷贝,准备烧录到EMMC;

11)、输入“cp arch/arm/boot/dts/stm32mp157d-atk.dtb /home/zgq/linux/atk-mp1/linux/bootfs/ -f回车”,执行文件拷贝,准备烧录到EMMC

12)、输入“cp arch/arm/boot/uImage /home/zgq/linux/tftpboot/ -f回车”,执行文件拷贝,准备从tftp下载;

13)、输入“cp arch/arm/boot/dts/stm32mp157d-atk.dtb /home/zgq/linux/tftpboot/ -f回车”,执行文件拷贝,准备从tftp下载;

14)、输入“cd /home/zgq/linux/atk-mp1/linux/bootfs/

切换到“/home/zgq/linux/atk-mp1/linux/bootfs/”目录

输入“ls -l回车”,查看“/home/zgq/linux/atk-mp1/linux/bootfs/”目录下的所有文件和文件夹

15)、输入“cd /home/zgq/linux/tftpboot/回车

切换到“/home/zgq/linux/tftpboot/”目录

输入“ls -l回车”,查看“/home/zgq/linux/tftpboot/”目录下的所有文件和文件夹

输入“chmod 777 stm32mp157d-atk.dtb回车

给“stm32mp157d-atk.dtb”文件赋予可执行权限

输入“chmod 777 uImage回车 ,给“uImage”文件赋予可执行权限

输入“ls回车”,查看“/home/zgq/linux/tftpboot/”目录下的所有文件和文件夹

16)、生成能烧录到EMMC的“bootfs.ext4”文件

输入“cd /home/zgq/linux/atk-mp1/linux/bootfs/回车”,切换到“/home/zgq/linux/atk-mp1/linux/bootfs/”目录

输入“ls  -l回车”,列出“bootfs”目录下的文件和文件夹

如果发现“bootfs.ext4”,则输入“rm bootfs.ext4”删除“bootfs.ext4

输入“du -h”查询容量,发现容量为7.1M

输入“dd if=/dev/zero of=bootfs.ext4 bs=1M count=10回车

输入“mkfs.ext4 -L bootfs bootfs.ext4回车

使用“mkfs.ext4”将“bootfs.ext4磁盘”格式化为“ext4”格式。

输入“ls -l回车”,列出“/home/zgq/linux/atk-mp1/linux/bootfs/”目录下的文件和文件夹

输入“sudo mount bootfs.ext4 /mnt/bootfs/回车”,

使用“mount命令”将“bootfs.ext4”磁盘挂载到“/mnt/bootfs”目录下;

输入“sudo cp uImage stm32mp157d-atk.dtb /mnt/bootfs/回车

将“uImage”和“stm32mp157d-atk.dtb”拷贝到“/mnt/bootfs/”目录中

输入“sudo umount /mnt/bootfs/回车”,使用“umount”卸载掉“bootfs”

输入“ls -l回车”,列出“/linux/atk-mp1/linux/bootfs”目录下的文件和文件夹

17)、烧录文件:

将“/linux/atk-mp1/linux/bootfs/bootfs.ext4”下载到“windows”中。

将“tf-a-stm32mp157d-atk-trusted.stm32,tf-a-stm32mp157d-atk-serialboot.stm32,u-boot.stm32bootfs.ext4”烧录到开发板。

18)、设置从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 系统

19)、设置从网络启动linux系统

设置“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 系统

至此,我们完成了linux内核的编译和烧录。

4、编译移植好的buildroot,构建根文件系统

1)、输入“cd /home/zgq/linux/buildroot/buildroot-2020.02.6/回车

切换到“/home/zgq/linux/buildroot/buildroot-2020.02.6/”目录下

2)、输入“ls回车

查看“/home/zgq/linux/buildroot/buildroot-2020.02.6/”目录下的所有文件和文件夹

记住:“stm32mp1_atk_defconfig”位于“/home/zgq/linux/buildroot/buildroot-2020.02.6/configs”目录中

记住:“make menuconfig”用于打开“buildroot”的图形化配置界面

记住:“make busybox-menuconfig”用于打开“buildroot中的busybox”的图形化配置界面

记住:“make stm32mp1_atk_defconfig”用于使用“make stm32mp1_atk_defconfig”覆盖“.config”

3)、输入“make show-targets回车”查看buildroot配置的目标软件包

4)、输入“make busybox回车”单独编译“busybox

5)、输入“make回车”执行编译“buildroot”

6)、挂载磁盘,拷贝文件,卸载磁盘,生成可供nfs下载的根文件系统

执行“cd /home/zgq/linux/nfs/rootfs切换目录

执行“sudo rm * -rf删除“/home/zgq/linux/nfs/rootfs”目录下的所有文件;

执行“cd /home/zgq/linux/buildroot/buildroot-2020.02.6/output/images切换目录;

执行“cp rootfs.tar /home/zgq/linux/nfs/rootfs”拷贝“rootfs.tar”

执行“cd /home/zgq/linux/nfs/rootfs切换目录

执行“tar -vxf rootfs.tar”解压“/home/zgq/linux/nfs/rootfs/rootfs.tar”

执行“rm rootfs.tar”删除“/home/zgq/linux/nfs/rootfs/rootfs.tar”

输入“ls -l”查看“/home/zgq/linux/nfs/rootfs/”目录,这就是由buildroot生成的可供nfs下载的根文件系统。

6)、生成能烧录到EMMC的“rootfs.ext4”文件

执行“cd /home/zgq/linux/rootfs/”进行目录切换

输入“du -h /home/zgq/linux/nfs/rootfs/

查看“/home/zgq/linux/nfs/rootfs/”目录的总容,因为下面创建“rootfs.ext4”要用到;

执行“dd if=/dev/zero of=rootfs.ext4 bs=1M count=1024”创建“rootfs.ext4”并分配1G个字节空间

执行“mkfs.ext4 -L rootfs rootfs.ext4”格式化“rootfs.ext4”并将卷标设置为“rootfs”

执行“sudo mount rootfs.ext4 /mnt/rootfs/”将“rootfs.ext4”挂载到“/mnt/rootfs/”目录下

执行“cd /home/zgq/linux/nfs/rootfs/”进行目录切换

执行“sudo cp * /mnt/rootfs/ -drf”将“/home/zgq/linux/nfs/rootfs/”目录下的所有文件拷贝到“/mnt/rootfs/”

执行“cd /home/zgq/linux/rootfs/”进行目录切换

执行“sudo umount /mnt/rootfs”卸载掉“/mnt/rootfs”目录下的所有文件

输入“ls -l”查看“/home/zgq/linux/rootfs”目录下是否生成新的“rootfs.ext4”,这个就是要烧录到EMMC中的文件

7)、烧录文件:

将“/home/zgq/linux/rootfs/rootfs.ext4”下载到“windows”中。

将“tf-a-stm32mp157d-atk-trusted.stm32,tf-a-stm32mp157d-atk-serialboot.stm32,u-boot.stm32bootfs.ext4rootfs.ext4”烧录到开发板。

8)、设置从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 系统

9)、设置从网络启动linux系统

设置“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 系统

至此,我们完成了使用“buildroot”构建根文件系统的编译和烧录。

由于使用busybox构建根文件系统很麻烦,就不加以总结了。在以后的开发中,我们主要使用buildroot来构建根文件系统。

这是一个非常完美的总结,只有真正参与整个系统移植,才能得到这个结论。每种开饭板的目录可能不一样,但大概流程是这样的。希望最好能参与移植,才能懂得其中的奥秘。

你可能感兴趣的:(产品研发,linux,服务器,STM32MP157,经验分享,根文件系统,编译,挂载)