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

上一篇已经成功安装了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、解压开发者包
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
解压内核
tar xvf linux-6.1.28.tar.xz

4、打ST patches
由于解压出来的内核是Linux官方内核,因此需要打上ST官方补丁后才能正常运行。
1)进入linux-6.1.28文件夹

cd linux-6.1.28

2)打补丁

for p in `ls -1 ../*.patch`; do patch -p1 < $p; done

3)应用fragments

make ARCH=arm multi_v7_defconfig "fragment*.config"
for f in `ls

 -1 ../fragment*.config`; do scripts/kconfig/merge_config.sh -m -r .config $f; done
yes '' | make ARCH=arm oldconfig

5、编译Linux内核源码
分成三部分,首先是编译Linux内核和设备树,其次是编译Linux内核模块,最后是生成输出文件。
1)编译内核和设备树

make ARCH=arm uImage vmlinux dtbs LOADADDR=0xC2000040

编译时间比较长,耐心等待

注意:编译之前要先source一下环境,否则编译会报错

source SDK/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi

2)编译内核模块

make ARCH=arm modules

编译时间比较长,耐心等待
3)生成输出文件

mkdir -p $PWD/install_artifact/
make ARCH=arm INSTALL_MOD_PATH="$PWD/install_artifact" modules_install

如果以上操作都没有报错误,那就说明编译工作都成功了。

【在开发板上部署Linux®内核】
1、推送Linux内核到开发板

scp arch/arm/boot/uImage root@<board ip address>:/boot

使用SCP将uImage推送到开发板,<board ip address>替换为开发板IP地址
 



2、推送设备树到开发板

scp arch/arm/boot/dts/stm32mp1xx*.dtb root@<board ip address>:/boot

使用SCP将.dtb推送到开发板,<board ip address>替换为开发板IP地址,xx替换为35
 



3、推送内核模块到开发板
1)删除install_artifact/lib/modules/<kernel-version>目录中创建的链接

rm install_artifact/lib/modules/6.1.28/build install_artifact/lib/modules/6.1.28/source

2)剥离内核模块(以减小每个内核模块的大小)【可选】

find install_artifact/ -name "*.ko" | xargs $STRIP --strip-debug --remove-section=.comment --remove-section=.note --preserve-dates


3)复制内核模块到开发板

scp -r install_artifact/lib/modules/* root@<ip of board>:/lib/modules

使用SCP将内核模块推送到开发板,<board ip address>替换为开发板IP地址
 



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



5)同步磁盘数据
 



5)重启开发板

reboot


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



到此,就已经完成了linux内核的编译并更新到开发板。
---------------------
作者:xinmeng_wit
链接:https://bbs.21ic.com/icview-3355730-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值