打印
[STM32MP1]

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

[复制链接]
375|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
上一篇已经成功安装了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内核的编译并更新到开发板。



使用特权

评论回复
沙发
星辰大海不退缩| | 2024-1-28 12:18 | 只看该作者
Linux内核编译需要过程比较繁琐,指令代码较多

使用特权

评论回复
板凳
小小蚂蚁举千斤| | 2024-1-28 21:52 | 只看该作者
编译Linux内核源码分成三部分,首先是编译Linux内核和设备树,其次是编译Linux内核模块,最后是生成输出文件。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

61

主题

216

帖子

1

粉丝