【STM32MP157&Linux系统】编译烧录linux内核

编译出厂Linux内核源码

(P469 15.1)
1、第三方库安装
编译内核之前需要一些必要的库,命令如下:

sudo apt-get update //先更新在安装,防止安装的时候报错
sudo apt-get install lzop
sudo apt-get install libssl-dev
sudo apt-get install u-boot-tools

完全按照教程是不会出错的,若报错可参考文章末尾,运行下面命令后重新编译:

sudo apt-get install libncurses-dev
sudo apt-get install flex
sudo apt-get install bison -y

2、在 Ubuntu 下新建一个名为“alientek_linux”的目录存放正点原子出厂 Linux 源码,正点原子出厂 Linux 系统源码已经放到了开发板光盘中,路径为:开发板光盘→1、程序源码→1、正点原子 Linux 出厂系统源码→linux-5.4.31-gb8d3ec3ac-v1.1.tar.bz2,将正点原子出厂 linux 系统源码拷贝到前面在 Ubuntu 下新建的“alientek_linux”目录下,拷贝完成以后使用如下命令解压缩:

cd alientek_linux //进入到 alientek_linux 目录
tar -vxjf linux-5.4.31-gb8d3ec3ac-v1.1.tar.bz2 //解压缩

在这里插入图片描述
3、打开 Linux 内核源码目录下的主 Makefile,按照如图 15.1.6 所示设置 ARCH 和CROSS_COMPILE:
在这里插入图片描述
4、在图 15.1.1 中 Linux 源码根目录下新建名为“stm32mp157d_atk.sh”的 shell 脚本,然后在这个 shell 脚本里面输入如下所示内容:

1 #!/bin/sh
2 make distclean
3 make stm32mp1_atk_defconfig
4 make menuconfig
5 make uImage dtbs LOADADDR=0XC2000040 -j16

5、使用 chmod 给予 stm32mp157d_atk.sh 可执行权限,然后运行此 shell 脚本,命令如下:

chmod 777 stm32mp157d_atk.sh //给予可执行权限
./stm32mp157d_atk.sh //执行编译脚本

除了第一次编译 Linux 源码,我们很少清理工程全编译的,后续驱动开发很少用“make distclean”来清理工程,都是直接“make uImage LOADADDR=0XC2000040”编译内核或者“make dtbs”编译设备树。

运行测试(tftp网络挂载)

(P509 17.1.2)
1、将 uImage 和 stm32mp157d-atk.dtb 这两
个文件发送到 Ubuntu 的 TFTP 服务器目录下
在这里插入图片描述在这里插入图片描述

在这里插入图片描述
2、启动开发板,uboot 通过 tftp 命令从 Ubuntu 中uImage 和 stm32mp157d-atk.dtb 并启动。设置 uboot中的 bootcmd 环境变量为:

setenv bootcmd 'tftp c2000000 uImage;tftp c4000000 stm32mp157d-atk.dtb;bootm c2000000 -
(有空格) c4000000' 
saveenv

3、启动以后 Linux 输出如图 17.1.2.1 所示信息:
在这里插入图片描述
从图 17.1.2.1 可以看出,Linux 内核已经运行成功,并且当前 Linux 内核编译时间为 2020年 12 月 11 日 16:52:12。
注意!如果出现如图 17.1.2.2 所示“end Kernel panic”错误为正常现象!
在这里插入图片描述
图 17.1.2.2 中的错误是由于根文件系统缺失导致的,也就是我们没有指定根文件系统,根文件系统的制作我们后面会详细讲解。

打包Linux 系统镜像和设备树

(P526 17.4.1)
即打包编译生成的uImagestm32mp157d-atk.dtbext4 格式

1、新建一个名为“bootfs”的文件夹,然后将 uImage和 stm32mp157d-atk.dtb 这两个文件放到 bootfs 文件夹下。
在这里插入图片描述
2、进入bootfs文件夹,新建一个 ext4 格式的磁盘,然后挂载这个 ext4 格式的磁盘,将 stm32mp157d-atk.dtb和 uImage 拷贝到这个 ext4 磁盘。

1 cd bootfs 
2 dd if=/dev/zero of=bootfs.ext4 bs=1M count=10
3 mkfs.ext4 -L bootfs bootfs.ext4

3、在/mnt/下创建一个目录用来挂载前面制作制作出来的 bootfs.ext4

sudo mkdir /mnt/bootfs

4、使用 mount 命令将 bootfs.ext4 挂载到/mnt/bootfs 目录下

cd /home/zuozhongkai/linux/atk-mp1/linux/bootfs
sudo mount bootfs.ext4 /mnt/bootfs/

5、挂载成功以后就将图 17.4.1.1 中的 uImage 和 stm32mp157d-atk.dtb 拷贝到/mnt/bootfs 目录下

cd /home/zuozhongkai/linux/atk-mp1/linux/bootfs
sudo cp uImage stm32mp157d-atk.dtb /mnt/bootfs/

6、拷贝完成以后使用 umount 卸/mnt/bootfs

sudo umount /mnt/bootfs

至此,uImage 和 stm32mp157d-atk.dtb 就已经打包到了图 17.4.1.2 中的 bootfs.ext4 中,稍后使用 STM32CubeProgrammer 软件将其烧写到 EMMC 里面。

烧写到 EMMC

(P528 17.4.2 )
1、将 bootfs.ext4 拷贝到以前创建的 images 目录下
在这里插入图片描述
2、修改 flashlayout 文件 tf-a.tsv,在后面加入 bootfs.ext4 的烧写脚本
在这里插入图片描述
3、设置好以后就可以使用
STM32CubeProgrammer 烧写系统了,烧写完成以后设置拨码开关从 EMMC 启动,启动以后进入 uboot 的命令行,输入如下命令查看 EMMC 分区 2 里面是否正确烧写了uImage 和stm32mp157d-atk.dtb:

ext4ls mmc 1:2

在这里插入图片描述
4、设置 bootcmd 环境变量,从 EMMC 里面读取系统镜像和设备树并启动,命令如下:

setenv bootcmd 'ext4load mmc 1:2 c2000000 uImage;ext4load mmc 1:2 c4000000 stm32mp157d-atk.dtb;bootm c2000000 - c4000000' 
saveenv
boot

在这里插入图片描述

最后的打包文件

在这里插入图片描述
提取链接(点击打开)
https://pan.baidu.com/s/1uabIUyOWbEjb2a8yUPt_HA?pwd=strp

报错记录

运行内核源码编译脚本报错

报错一 Makefile:662: recipe for target ‘.config’ failed

Makefile:613: include/config/auto.conf: 没有那个文件或目录
Makefile:659: include/config/auto.conf.cmd: 没有那个文件或目录
Makefile:662: recipe for target ‘.config’ failed
make: *** [.config] Error 1
HOSTCC scripts/basic/fixdep
Makefile:613: include/config/auto.conf: 没有那个文件或目录
Makefile:659: include/config/auto.conf.cmd: 没有那个文件或目录
Makefile:662: recipe for target ‘.config’ failed

在这里插入图片描述
解决方法:
执行安装libncurses-dev命令,再次运行脚本即可

sudo apt-get install libncurses-dev

在这里插入图片描述在这里插入图片描述
关闭上面这个配置界面后的命令行:
在这里插入图片描述

报错二 /bin/sh: 1: flex: not found

解决办法:

sudo apt-get install flex

报错三 /bin/sh: 1: bison: not found

解决办法:

sudo apt-get install bison -y
  • 22
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值