你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32mp1 linux最小根文件系统制作教程(stm32mp157开发板实操)

[复制链接]
STMCU小助手 发布时间:2022-9-28 21:53
关于stm32mp1,ST官方提供的系统太庞大,开机速度慢,占用空间大。基于这个问题,我们整理了Linux5.4.31最小根文件系统的镜像及对应教程,希望对stm32mp157开发板使用的用户有所帮助。

1. 根文件系统开发实验
1.1 实验目的
熟悉Linux 文件系统目录结构,创建自己的文件系统,通过NFS 方式测试。

1.2 实验平台
华清远见开发环境,FS-MP1A平台;

1.3 实验步骤
1 . 根文件系统制作

可以网站下载busybox-1.29.3源码用于制作Linux文件系统,为了方便,已将源码放进了光盘。

安装交叉编译工具链。

  1. linux@ubuntu:$ sudo apt-get install gcc-arm-linux-gnueabihf
  2. linux@ubuntu:$ sudo apt-get install g++-arm-linux-gnueabihf
复制代码

验证开发工具是否安装正确,显示版本信息如下图所示。

linux@ubuntu arm-linux-gnueabihf-gcc -v

675185f94749531eab2e8521089de8ff.jpg

建立源码目录
  1. linux@ubuntu:$ cd ~
  2. linux@ubuntu:$ mkdir -p fs-mp1a
复制代码

将busybox-1.29.3.tar.bz2拷贝至该目录。

  1. linux@ubuntu:$ tar xvf busybox-1.29.3.tar.bz2             //解压源码
  2. linux@ubuntu:$ cd busybox-1.29.3
复制代码

配置busybox 源码:

将顶层目录下的Makefile文件中的CROSS_COMPILE字段修改为“arm-linux-gnueabihf-”

749659e7ce33f577357bb122e7b69017.jpg

可以使用如下命令配置源码

linux@ubuntu make menuconfig

5aad1940d79d9db5e446b1ae07552dea.png

编译源码:

linux@ubuntu make
安装:

busybox 默认安装路径为源码目录下的_install

linux@ubuntu make install

进入安装目录:

  1. linux@ubuntu:$ cd  _install
  2. linux@ubuntu:$ ls
  3. bin  linuxrc  sbin   usr
复制代码

创建其他需要的目录:

  1. linux@ubuntu:$ mkdir   dev   etc  mnt   proc   var  tmp   sys   root
复制代码

添加库:

将工具链中的库拷贝到_install 目录下:

linux@ubuntu cp /usr/arm-linux-gnueabihf/lib/ . -a

删除静态库:

linux@ubuntu rm lib/*.a   
   
添加系统启动文件:

在etc下添加文件inittab,文件内容如下:

注意:修改文件均为_install目录下

etc/inittab

  1. #this is run first except when booting in single-user mode.
  2. ::sysinit:/etc/init.d/rcS
  3. # /bin/sh invocations on selected ttys
  4. # start an "askfirst" shell on the console (whatever that may be)
  5. ::askfirst:-/bin/sh
  6. # stuff to do when restarting the init process
  7. ::restart:/sbin/init
  8. # stuff to do before rebooting
  9. ::ctrlaltdel:/sbin/reboot
复制代码

在etc下添加文件fstab,文件内容如下:

/etc/fstab

  1. #device        mount-point        type        options    dump        fsck        order
  2. proc         /proc                proc         defaults        0                0
  3. tmpfs        /tmp                tmpfs        defaults        0                0
  4. sysfs        /sys                sysfs        defaults        0                0
  5. tmpfs        /dev                tmpfs        defaults        0                0
复制代码

这里我们挂载的文件系统有三个proc、sysfs和tmpfs。

回到创建的文件系统处,在etc下创建init.d目录,并在init.d下创建rcS文件,rcS 文件内容为:

etc/init.d/rcS

  1. #!/bin/sh
  2. # This is the first script called by init process
  3. /bin/mount   -a
  4. /sbin/mdev   -s
复制代码

为rcS 添加可执行权限:

linux@ubuntu chmod a+x init.d/rcS

在etc 下添加profile 文件,文件内容为:

etc/profile

  1. #!/bin/sh
  2. export HOSTNAME=fsmp1a
  3. export USER=root
  4. export HOME=root
  5. export PS1="[$USER@$HOSTNAME \W]\# "
  6. PATH=/bin:/sbin:/usr/bin:/usr/sbin
  7. LD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATH
  8. export PATH   LD_LIBRARY_PATH
复制代码

2 . NFS 测试

删除原先的/source/rootfs:

  1. linux@ubuntu:$ sudo rm -rf /source/rootfs
复制代码

将我们新建的根文件系统拷贝到/source/rootfs目录下

  1. linux@ubuntu:$ sudo mkdir /source/rootfs
  2. linux@ubuntu:$ sudo cp _install/* /source/rootfs -a
复制代码

修改ubuntu主机中的/tftpboot/pxelinux.cfg/01-00-80-e1-42-60-17文件添加nfs启动选项

  1. # Generic Distro Configuration file generated by OpenEmbedded
  2. menu title Select the boot mode
  3. MENU BACKGROUND /splash.bmp
  4. TIMEOUT 20
  5. DEFAULT stm32mp157a-fsmp1a-emmc
  6. LABEL stm32mp157a-fsmp1a-emmc
  7.     KERNEL /uImage
  8.     FDT /stm32mp157a-fsmp1a.dtb
  9.     APPEND root=/dev/mmcblk2p4 rootwait rw console=ttySTM0,115200
  10. LABEL stm32mp157a-fsmp1a-nfs
  11.     KERNEL /uImage
  12.     FDT /stm32mp157a-fsmp1a.dtb
复制代码

    APPEND root=/dev/nfs nfsroot=192.168.11.251:/source/rootfs ip=dhcp rootwait rw earlyprintk console=ttySTM0,115200
上述配置中共有两个启动项分别为stm32mp157a-fsmp1a-emmc、stm32mp157a-fsmp1a-nfs。其中stm32mp157a-fsmp1a-emmc选项为正常启动配置;stm32mp157a-fsmp1a-nfs为nfs挂载方式,这里需要注意的是nfsroot=192.168.11.251部分的ip需要根据ubunut主机的实际ip填写。

重新启动开发板,选择nfs启动选项。

9d5f22a6b1a1365fc0b204ac701d5f68.png

查看是否能够正常挂载,功能是否正常

9e3c0c6458e251a87d224ca3b7156ad5.jpg

2. 制作根文件系统镜像
上小节已经制作好了根文件系统,并且从NFS已经成功启动。本小节将制作一个根文件系统镜像用于后续的固化和烧录。

2. 制作ext4格式的文件系统

在ubuntu中制作一个EXT4空文件, 此处设则为300M大小,由于安装的软件较多时,文件系统会很大,用户可以根据情况自行更改。

  1. linux@ubuntu:$ dd if=/dev/zero of= fsmp1x_rootfs.ext4 bs=300M count=1
  2. linux@ubuntu:$ sudo mkfs.ext4 fsmp1x_rootf.ext4
复制代码

2. 复制文件系统

将上小节我们移植完成的跟文件系统中所的文件夹都fuubuntu18_rootfs.ext4文件挂载到临时目录/mnt,并拷贝文件系统。

linux@ubuntu sudo mount -o loop fsmp1x_rootf.ext4 /mnt

如果我们已经制作了前面的文件系统则直接拷贝/source/rootfs/下的文件即可

linux@ubuntu sudo cp /source/rootfs/* /mnt -a

如果我们之前没有编译制作文件系统也可以将【华清远见-FS-MP1A开发资料\02-程序源码\04-Linux系统移植\02-移植好的系统镜像文件】下的rootfs.tar.xz文件导入到虚拟机中,使用我们已经移植好的跟文件系统进行制作。

linux@ubuntu sudo tar -xvf rootfs.tar.xz -C /mnt

3. 卸载挂载的fsmp1x_rootf.ext4文件

linux@ubuntu:$ sudo umount /mnt

此时跟文件系统镜像就制作完成了。可以将这个文件导出到windos下烧录到开发板中运行。

4. 修改烧录文件

如果想要烧录到开发板那么就需要修改,烧写文件。这里以eMMC启动的trusted镜像为例来说明。其它启动的修改方法也类似。

修改flashlayout_fs-mp1a-weston\trusted下的FlashLayout_sdcard_stm32mp157a-fsmp1a-trusted.tsv文件将Id为0x23的rootfs分区镜像名由fs-mp1a-weston-openstlinux-weston-fsmp1a.ext4修改为fsmp1x_rootf.ext4。按照《STM32CubeProgrammer烧写方式》章节进行烧录即可。

cb04d1041cbf2c77b0f68b1a46b3736b.png

————————————————
版权声明:华清远见IT开放实验室


收藏 评论0 发布时间:2022-9-28 21:53

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版