嵌入式基础-配置产品定制内核
QQ群-名称:嵌入式交流 ;群号:933192343;微信号:WangMing_GZ
目前我接触的内核区别有几种;
1.平台区别:arm和mips
2.版本区别:修改GPIO配置的方法不一样,有设备树和非设备树的区分;非设备树的修改会比较复杂,暂时不写使用教程
1.新增产品配置文件config
根据芯片平台的开发文档可以知道芯片默认要使用的config文件,拷贝默认的config文件生成一份带项目名称的配置文件
<< readme
1.arm平台的修改方法,目前以安凯EV300L为基础来开发,
默认的配置文件为anycloud_ak3918ev300l_mini_defconfig,
根据自己的环境修改配置文件命名
2.mips平台只要将arch/arm/改为arch/mips/即可,根据自己的需求去选择默认配置文件
readme
#内核路径下
cp arch/arm/configs/anycloud_ak3918ev300l_mini_defconfig arch/arm/configs/test_pro
2.新增产品配置设备树dts
设备树配置和config文件配置是类似的,根据芯片平台的开发文档可以知道芯片默认要使用的dts文件,拷贝默认的dts文件生成一份带项目名称的dts文件
<< readme
1.arm平台的修改方法,目前以安凯EV300L为基础来开发,
默认的设备树dts文件为EVB_CBDM_AK3918EV300L_V1.0.0.dts,
根据自己的环境修改设备树dts的文件命名
2.mips平台只要将arch/arm/改为arch/mips/即可,根据自己的需求去选择默认的设备树dts文件
readme
cp arch/arm/boot/dts/EVB_CBDM_AK3918EV300L_V1.0.0.dts arch/arm/boot/dts/test_pro.dts
3.新增项目编译宏定义
a.获取项目宏定义
根据默认的 EVB_CBDM_AK3918EV300L_V1.0.0.dts 设备树在 arch/arm/boot/dts/Makefile 文件里找到对应的宏定义
<< readme
打开Makefile文件,可以看到EVB_CBDM_AK3918EV300L_V1.0.0对应的宏定义为CONFIG_MACH_AK3918EV300L
readme
vi arch/arm/boot/dts/Makefile
b.查找芯片平台的Kconfig文件
根据宏定义CONFIG_MACH_AK3918EV300L在内核里找到对应的Kconfig文件,查询后配置文件为 arch/arm/mach-anycloud/Kconfig
<< readme
使用下面的命令去搜索Kconfig文件
readme
grep " MACH_AK3918EV300L" -rn
c.新增自定义项目到Kconfig文件中
<< readme
修改arch/arm/mach-anycloud/Kconfig内容,在endchoice上添加内容
choice Test_Project
config TEST_PRO
bool "Test Pro"
depends on ARCH_AK
select MULTI_IRQ_HANDLER
help
Support for AK3918EV300L
endchoice
readme
vi arch/arm/mach-anycloud/Kconfig
d.将新增的宏定义重新写到设备树的Makefile
<< readme
修改arch/arm/boot/dts/Makefile内容,添加test_pro内容
dtb-$(CONFIG_TEST_PRO) += test_pro.dtb
readme
vi arch/arm/boot/dts/Makefile
e.修改当前编译的配置
<< readme
将配置文件生成当前要编译的.config配置文件
readme
cp arch/arm/configs/test_pro .config
<< readme
使用make menuconfig命令修改要编译的项目宏定义
System Type -> Test project type -> Test Pro (按下回车)
readme
make menuconfig
修改配置之后就不断按下 Esc,退出内核配置界面后点击 Yes 即可
f.将当前配置保存为项目配置文件和编译内核
<< readme
将修改后的编译配置文件拷贝到arch/arm/configs/test_pro,这步操作是用于保存所有配置;
readme
cp .config arch/arm/configs/test_pro
<< readme
编译内核,根据芯片平台SDK文档说明使用编译命令,每个芯片平台编译命令都会有不一样的细分;
make uImage -j4并不适用于所有的芯片平台
readme
make uImage -j4