“Linux内核-配置及编译”的版本间的差异
来自华清远见研发中心
(→配置内核) |
(→编译内核) |
||
第48行: | 第48行: | ||
==编译内核== | ==编译内核== | ||
+ | linux@ubuntu:$ make -j4 ARCH=arm uImage vmlinux LOADADDR=0xC2000040 | ||
+ | [[Image:48-1-5-1.png]] <br> | ||
+ | |||
+ | 编译后在内核源码目录下,能够在生成一个vmlinux文件,该文件是没有经过压缩的内核镜像,这个镜像导出了所有的内核符号可以用作仿真调试。<br> | ||
+ | [[Image:48-1-5-2.png]] <br> | ||
+ | |||
+ | 此外在arch/arm/boot目录下还生成了一个uImage文件,这就是经过压缩的内核镜像。可以用作系统启动。 | ||
+ | [[Image:48-1-5-3.png]] <br> | ||
+ | |||
==编译内核模块== | ==编译内核模块== | ||
==生成设备树== | ==生成设备树== | ||
==配置tftp== | ==配置tftp== |
2020年7月27日 (一) 16:33的版本
解压内核
建立源码目录
linux@ubuntu:$ cd ~/ FS-MP1A/stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24/sources/arm-ostl-linux-gnueabi/linux-stm32mp-5.4.31-r0
该目录下以patch结尾的文件为ST官方提供的补丁文件,l linux-5.4.31.tar.xz为标准linux源码包。
解压标准内核源码包
linux@ubuntu:$ tar -xvf linux-4.19.94.tar.xz
linux@ubuntu:$ cd linux-5.4.31
添加STMicroelectronics官方补丁
解压linux内核源码后得到的是Linux社区的标准内核源码,接下来需要将ST官方提供的源码补丁添加到标准内核中。
linux@ubuntu:$ for p in `ls -1 ../*.patch`; do patch -p1 < $p; done
该命令会将上层目录下所有的patch补丁文件应用到当前的内核中。
生成标准板配置文件
生成multi_v7_defconfig默认配置
linux@ubuntu:$ make ARCH=arm multi_v7_defconfig "fragment*.config"
在默认multi_v7_defconfig配置中加入ST官方提供的fragment config
linux@ubuntu:$ for f in `ls -1 ../fragment*.config`; do scripts/kconfig/merge_config.sh -m -r .config $f; done linux@ubuntu:$ yes '' | make ARCH=arm oldconfig
生成自己的默认配置文件
linux@ubuntu:$ cp .config arch/arm/configs/stm32_fsmp1a_defconfig
取消git中的SHA1
linux@ubuntu:$ echo "" > .scmversion
配置内核
导入交叉编译工具链(如果还未安装SDK可参考《SDK工具链安装》章节进行安装)
linux@ubuntu:$ source /opt/st/stm32mp1/2.6-snapshot/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi
验证开发工具是否安装正确,显示版本信息如下图所示。
linux@ubuntu:$ $CC --version
在编译前如果需要编译额外的功能或者驱动,可以使用meunconfig来对内核进行配置。
linux@ubuntu:$ make menuconfig
可以在如上菜单中对内核进行详细的配置。
编译内核
linux@ubuntu:$ make -j4 ARCH=arm uImage vmlinux LOADADDR=0xC2000040
编译后在内核源码目录下,能够在生成一个vmlinux文件,该文件是没有经过压缩的内核镜像,这个镜像导出了所有的内核符号可以用作仿真调试。
此外在arch/arm/boot目录下还生成了一个uImage文件,这就是经过压缩的内核镜像。可以用作系统启动。