[STM32MP1] 【STM32MP135F-DK测评】Linux内核编译与部署

[复制链接]
1627|3
 楼主| xinmeng_wit 发表于 2024-1-20 17:20 | 显示全部楼层 |阅读模式
上一篇已经成功安装了SDK并运行了第一个应该程序。但是对于一些内核修改或者驱动编写来说还是不够用的,因此本篇学习内核的编译 与 部署到开发板。

【编译Iinux内核】
1、官网下载STM32MP1开发者包
St官网下载STM32MP1开发者包en.sources-stm32mp1-openstlinux-6.1-yocto-mickledore-mp1-v23.06.21.tar.gz
下载地址:https://www.st.com/en/embedded-software/stm32mp1dev.html#get-software
2、解压开发者包
  1. tar xvf en.sources-stm32mp1-openstlinux-6.1-yocto-mickledore-mp1-v23.06.21.tar.gz
注意:有时候命令行解压不成功,可以在GUI界面右键进行解压
3、解压Linux内核
进入文件夹stm32mp1-openstlinux-6.1-yocto-mickledore-mp1-v23.06.21/sources/arm-ostl-linux-gnueabi/linux-stm32mp-6.1.28-stm32mp-r1-r0
解压内核
  1. tar xvf linux-6.1.28.tar.xz
4、打ST patches
由于解压出来的内核是Linux官方内核,因此需要打上ST官方补丁后才能正常运行。
1)进入linux-6.1.28文件夹
  1. cd linux-6.1.28
2)打补丁
  1. for p in `ls -1 ../*.patch`; do patch -p1 < $p; done
3)应用fragments
  1. make ARCH=arm multi_v7_defconfig "fragment*.config"
  1. for f in `ls
  2. -1 ../fragment*.config`; do scripts/kconfig/merge_config.sh -m -r .config $f; done
  1. yes '' | make ARCH=arm oldconfig
5、编译Linux内核源码
分成三部分,首先是编译Linux内核和设备树,其次是编译Linux内核模块,最后是生成输出文件。
1)编译内核和设备树
  1. make ARCH=arm uImage vmlinux dtbs LOADADDR=0xC2000040
编译时间比较长,耐心等待

注意:编译之前要先source一下环境,否则编译会报错
  1. source SDK/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi
2)编译内核模块
  1. make ARCH=arm modules
编译时间比较长,耐心等待
3)生成输出文件
  1. mkdir -p $PWD/install_artifact/
  1. make ARCH=arm INSTALL_MOD_PATH="$PWD/install_artifact" modules_install
如果以上操作都没有报错误,那就说明编译工作都成功了。

【在开发板上部署Linux®内核】
1、推送Linux内核到开发板
  1. scp arch/arm/boot/uImage root@<board ip address>:/boot
使用SCP将uImage推送到开发板,<board ip address>替换为开发板IP地址
11.jpg

2、推送设备树到开发板
  1. scp arch/arm/boot/dts/stm32mp1xx*.dtb root@<board ip address>:/boot
使用SCP将.dtb推送到开发板,<board ip address>替换为开发板IP地址,xx替换为35
22.jpg

3、推送内核模块到开发板
1)删除install_artifact/lib/modules/<kernel-version>目录中创建的链接
  1. rm install_artifact/lib/modules/6.1.28/build install_artifact/lib/modules/6.1.28/source
2)剥离内核模块(以减小每个内核模块的大小)【可选】
  1. find install_artifact/ -name "*.ko" | xargs $STRIP --strip-debug --remove-section=.comment --remove-section=.note --preserve-dates

3)复制内核模块到开发板
  1. scp -r install_artifact/lib/modules/* root@<ip of board>:/lib/modules
使用SCP将内核模块推送到开发板,<board ip address>替换为开发板IP地址
33.jpg

4)开发板重新生成模块依赖列表和符号表
44.jpg

5)同步磁盘数据
55.jpg

5)重启开发板
  1. reboot

6)查看内核版本及编译时间
重启完成后就可以查看内核版本和编译时间了
66.jpg

到此,就已经完成了linux内核的编译并更新到开发板。



星辰大海不退缩 发表于 2024-1-28 12:18 | 显示全部楼层
Linux内核编译需要过程比较繁琐,指令代码较多
小小蚂蚁举千斤 发表于 2024-1-28 21:52 | 显示全部楼层
编译Linux内核源码分成三部分,首先是编译Linux内核和设备树,其次是编译Linux内核模块,最后是生成输出文件。
zhgongzuoshi 发表于 2024-7-4 13:48 | 显示全部楼层
"使用SCP将.dtb推送到开发板,<board ip address>替换为开发板IP地址,xx替换为35
xx应该是35f-dk吧
711406686379f7dc14.png
您需要登录后才可以回帖 登录 | 注册

本版积分规则

70

主题

279

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部