源码配置编译
源码配置编译,要把中间各个环节都理清楚
厂商把自己增加的东西专门放了个文件独立,方便开发者发现变化
1.菜单配置
移植的第一步,就是选配,通过make menuconfig图形化界面选配
//载入配置
$ make ARCH=arm64 tegra_defconfig //导入官方配置
//会从arch/arm64/configs下 查找tegra_defconfig,导入到当前目录,重命名为.config)
$ make menuconfig //在官方配置基础上进行配置
//从零配置
$ mv .config .config.ago //如有,则改名 -> 清除当前配置(.config)
$ make menuconfig ARCH=arm64 /*生成最初始配置界面(如不指定ARCH,默认的是x86的)
当前目录有.config则导入,如无则用默认x86配置生成.config
*/
//保存配置
$ make savedefconfig //生成defconfig (相比make menuconfig 里的Save保存的配置,这是最简的)
$ cp defconfig arch/arm64/configs/my_defconfig //发布配置(原厂发布配置到内核就是该方式)
1.1载入配置
//载入配置
$ make ARCH=arm64 tegra_defconfig //导入官方配置
//会从arch/arm64/configs下 查找tegra_defconfig,导入到当前目录,重命名为.config)
$ make menuconfig //在官方配置基础上进行配置
1.2从零配置
//从零配置
$ mv .config .config.ago //如有,则改名 -> 清除当前配置(.config)
$ make menuconfig ARCH=arm64 /*生成最初始配置界面(如不指定ARCH,默认的是x86的)
当前目录有.config则导入,如无则用默认x86配置生成.config
*/
ARM64的全新的配置
General setup->Cross-compiler tool prefix 交叉编译工具(可以这里指定,也可以Makefile中改)
Enable loadable module support 模块的支持ko文件
Enable the block layer 块设备支持
Platform selection 平台选择,虽然架构一样,但是不同厂商的芯片也各不同
Bus support 总线支持,例如PCIe等
Kernel Features 内核特性
Boot options 启动选项,可以默认bootargs
Power management options 电源管理
Networking support 网络
Device Drivers 驱动
1.3保存配置
//第一种,make menuconfig生成的.config放到对应目录,比较多无关信息
cd ~/kernel-4.9
cp .config arch/arm64/configs/yhai_defconfig
//第二种保存配置
$ make savedefconfig //生成defconfig (相比make menuconfig 里的Save保存的配置,这是最简的)
$ cp defconfig arch/arm64/configs/yhai_defconfig //发布配置(原厂发布配置到内核就是该方式)
2.编译
$ make /*编译所有
常需指定 交叉编译工具链 CROSS_COMPILE(如无默认采用 gcc)
方式一: make CROSS_COMPILE=aarch64-linux-gnu- 直接指定
方式二: export CROSS_COMPILE=aarch64-linux-gnu- 导出环境变量
*/
$ make all
$ make Image //只编译内核
$ make modules //只编译模块
$ make dtbs //只编译设备树
$ make install /*安装内核 就是把编译出来的二进制文件,库,配置文件等等放到相应目录下
常需指定 安装路径 INSTALL_PATH
方式一: make install INSTALL_PATH=/tftpboot 直接指定
方式二: export INSTALL_PATH=/tftpboot 导出环境变量
*/
$ make modules_install /*安装模块
常需指定 安装路径 INSTALL_MOD_PATH
方式一:make modules_install INSTALL_MOD_PATH=~/Linux_for_Tegra/rootfs 直接指定
方式二:export INSTALL_MOD_PATH=~/Linux_for_Tegra/rootfs 导出环境变量
*/
3.菜单配置的实现
为什么make menuconfig后能生成图形界面
3.1顶层配置
Kconfig 总菜单
source “arch/$SRCARCH/Kconfig” 子菜单
menu “Bus support” 显示的字
menuconfig 可以选的菜单
config 可以选的参数
default 默认选择 显示-*-
bool 只有YN 显示[*]
tristate 三态YNM 显示<>
{
//Kconfig
//对应菜单信息 .config - Linux/arm64 4.9.253 Kernel Configuration
mainmenu "Linux/$ARCH $KERNELVERSION Kernel Configuration"
config SRCARCH
string
option env="SRCARCH"
source "arch/$SRCARCH/Kconfig" //导入子Kconfig
}
{
//arch/arm64/Kconfig
source "init/Kconfig" //gf 跳转到子配置【这个对应General setup --->】
source "kernel/Kconfig.freezer"
source "arch/arm64/Kconfig.platforms" //3.2平台选择
menu "Bus support"
config PCI
bool "PCI support"
help
This feature enables support for