引言
在不熟悉开发板的硬件以及底层驱动时,我们一般使用开发板自带的出厂源码进行修改,编译,做二次开发。此文档主要记录在进行开发板二次开发前的准备工作。
步骤一:Ubuntu中home目录的定义
/home/alientek/linux/…
/home/alientek/mp157/…
/home/alientek/…
Linux目录---uboot启动时挂载的路径
nfs文件夹:存放文件系统,通过nfs挂载
tftp文件夹:存放设备树、内核镜像。通过tftp协议拷贝到开发板DDRAM运行
tool文件夹:存放linux开发使用的软件压缩包 gcc编译器 vscode编辑器
mp157目录---用于开发人员二次开发
alientek_mp157文件夹:存放正点原子开发板的源码
jankey_mp157文件夹:存放开发者二次开发,经过修改的源码(过程文档)
二次开发编译完成后,产生对应的设备树,镜像等文件后,替换到linux目录挂载运行
挂载运行调试完成后,最终用烧录器固化到EMMC
步骤二:源码资料包拷贝到Ubuntu系统
源文件(windows端) |
目的路径(Ubuntu端) |
备注 |
E:\Alientek\01_Source_Code\01、正点原子Linux出厂系统源码\linux-5.4.31-gca8f6cddb-v1.7.tar.bz2 |
/home/alientek/mp157/alientek_mp157/alientek_kernel |
内核源码 |
E:\Alientek\01_Source_Code\01、正点原子Linux出厂系统源码\tf-a-stm32mp-2.2.r1-g212d381-v1.4.tar.bz2 |
/home/alientek/mp157/alientek_mp157/alientek_tf-a |
Tf-a安全启动 |
E:\Alientek\01_Source_Code\01、正点原子Linux出厂系统源码\u-boot-stm32mp-2020.01-g00f14581-v1.4.tar.bz2 |
/home/alientek/mp157/alientek_mp157/alientek_uboot |
Uboot引导程序 |
E:\Alientek\08_System_Images\02、出厂系统镜像\06、Qt5.12.9文件系统\atk-image-qt5.12.9-rootfs.tar.bz2 |
/home/alientek/mp157/alientek_mp157/alientek_rootfs |
Qt文件系统 |
步骤三:编译源码输出执行文件用于uboot挂载启动
(一) 编译正点原子Linux内核源码
参考文档:【正点原子】STM32MP1嵌入式Linux驱动开发指南V2.0.pdf
1. 解压源码
1.1进入目录
cd /home/alientek/mp157/alientek_mp157/alientek_kernel
1.2解压缩
tar -vxjf linux-5.4.31-gb8d3ec3ac-v1.1.tar.bz2
解压完成如下图所示
2. 执行编译
编译的方法有两种:全编译和单独编译
2.1 使用编译脚本进行全编译
2.1.1 修改Makefile文件,指定要使用的编译器
ARCH = arm
CROSS_COMPILE = arm-none-linux-gnueabihf-
2.1.2在/home/alientek/mp157/alientek_mp157/alientek_kernel路径下新建一个脚本文件,命名为stm32mp157d_atk.sh,然后填入以下内容
1 #!/bin/sh
2 make distclean
3 make stm32mp1_atk_defconfig
4 make menuconfig
5 make uImage dtbs LOADADDR=0XC2000040 -j6
2.1.3 给予 stm32mp157d_atk.sh 可执行权限,然后运行此 shell 脚本
chmod 777 stm32mp157d_atk.sh //给予可执行权限
./stm32mp157d_atk.sh //执行编译脚本
编译过程会弹出Linux 图形配置界面,我们无需配置,按两下ESC退出即可。
编译完成如下图所示
2.1.4 进入到arch/arm/boot目录,其中的uImage 就是要用的 Linux 镜像文件
2.1.5 进入到arch/arm/boot/dts目录,其中的stm32mp157d-atk.dtb就是要用的设备树文件
2.2单独编译
由于编译整个源码耗时会非常长,而且很多时候不必全编译,这时可以使用单独编译的方法。
如果要单独编译 uImage 可以使用如下命令:
make uImage LOADADDR=0XC2000040
单独编译设备树
make dtbs
如果需要修改配置,可以使用以下命令弹出Linux图形化配置界面
make menuconfig
3 拷贝编译好的镜像文件和设备树文件
编译完成后,把镜像文件和设备树文件拷贝到tftpboot目录下,用于挂载启动
拷贝镜像文件
cd ~/mp157/alientek_mp157/alientek_kernel/arch/arm/boot/
cp uImage ~/linux/tftpboot/
拷贝设备树文件
cd ~/mp157/alientek_mp157/alientek_kernel/arch/arm/boot/dts/
cp stm32mp157d-atk.dtb ~/linux/tftpboot/
4 测试是否挂载启动成功
4.1开发板连接串口到windows端,重新上电
4.2在uboot启动过程中进入到uboot命令行状态
4.3设置tftp挂载路径
setenv bootcmd 'tftp c2000000 uImage;tftp c4000000 stm32mp157d-atk.dtb;bootm c2000000 - c4000000’
输入boot命令
对比上面两张图,我们可以看到挂载启动的内核版本与前面编译出来的版本日期是一致的。
由于虚拟机里的时区是正8区的,与windows一致,因此是18:13:42 但是挂载启动的时区默认是正0区的,因此是10:13:42这是正常的。
注意:以上第4步的验证的前提条件是Ubuntu搭建好了网络启动的环境,配置好了IP地址。否则是不行的。这里仅作为展示效果,不展开说明如何搭建网络启动环境。
以上就是编译Linux源码与挂载启动的全部内容。在做二次开发时,我们可以把这些源码拷贝到自己的工作目录进行修改,如修改内核配置或者设备树驱动,修改完成后在自己的工作目录进行编译,输出文件替换到挂载路径,完成二次开发。
(二) 编译正点原子qt文件系统源码
未完待续……
1. 解压源码
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~