您的位置:首页 > 运维架构 > Linux

Linux 内核修改 xxx_defconfig 的正确方法

2017-09-14 20:01 295 查看
【前言】

  昨天将 Android N 上的驱动代码移植到 Android O 上,xxxx_defconfig 文件是我手动修改的,但因为公司将内核版本切换到 4.9 之后开启了强制代码格式检查,所以 Patch 在提交到服务器之后无法通过格式检测,一直提示存在如下问题:

checkpatch found errors or warnings:
$ git log -1 | ./scripts/xxx/merge_pre_check.pl -; total 3 errors.
1: xxxx64_defconfig not generated by savedefconfig
2: xxxx32_defconfig not generated by savedefconfig


  说来惭愧,在之前的项目开发过程中我没有使用过
checkpatch.pl
脚本对代码修改进行过格式检查,这个问题我搞了一整天才搞好。所以这里记录一下。

【检查 Kconfig 文件】

  在最新的内核提交规范中,要求 Kconfig 文件中所有模块的默认配置都设置为
n
,并且不允许使用
select
语句。这是为了让使用者必须手动显示地去选择上驱动模块的配置。所以如果我们的老代码中将模块默认配置设置成的
y
或者使用的
select
语句隐式地打开了某些依赖模块的开关,我们都需要在移植过程中进行修改:将
y
改成
n
,将
select
改成
depends on
,不再使用的菜单或配置项则应该被去掉或注释掉。

  比如我所负责模块里老的 Kconfig 文件写法如下:

menu "Audio Interface"
config XXX_AUDIO
bool "XXX Audio Interface"
default y
select SOUND
select SND_SOC
select SND
select XXX_AUDIO_DSP
select SND_XXX_SOC
select SWITCH
help
"XXX Audio Interface"
endmenu


  将上方的内容按要求进行修改后则是像下方这样:

menu "Audio Interface"
config XXX_AMAUDIO
bool "XXX Audio Interface"
default n
depends on SOUND
depends on SND_SOC
depends on SND
depends on XXX_AUDIO_DSP
#depends on SND_XXX_SOC
#depends on SWITCH
help
"XXX Audio Interface"
endmenu


【修改 defconfig 文件】

  我使用的平台分 32 位和 64位,我们要对这 2 个 defconfig 文件都进行修改。文件分别位于
arch/arm/configs/xxxx32_defconfig
arch/arm64/configs/xxxx64_defconfig


  首先执行以下命令从老的
xxxx_defconfig
文件生成临时使用的
.config
文件:

$ make ARCH=arm xxxx32_defconfig


  其中
ARCH=arm
用来指明当前修改的是 32 位配置,如果要修改的是 64 位配置就应该将这个参数指定为
ARCH=arm64
后文均以 32 位为例。然后在 menuconfig 菜单中手动选择上我们需要添加的模块。执行以下命令打开配置菜单:

$ make ARCH=arm menuconfig


  手动选择好要使用的模块,保存并退出后,我们的配置就写入到
.config
文件中了。然后我们再执行下方的命令将配置保存到
defconfig
文件中:

$ make ARCH=arm savedefconfig


  上方这条命令在成功被执行之后,我们可以在内核的根目录下发现新增了一个名为
defconfig
的文件,这个文件里包含了所有模块的配置。我们只需要将要移植的模块配置添加到
xxxx32_defconfig
文件中就行了,可以使用下方的命令查看要添加的内容:

$ diff -u arch/arm/configs/xxxx32_defconfig defconfig


  最后将上方命令打印出的那部分改动合入到
arch/arm/configs/xxxx32_defconfig
文件中就好了。

  通过这种方式修改的 defconfig 文件在提交到服务器后就不会再被提示
xxxx32_defconfig not generated by savedefconfig
了。

  关于代码格式的一些更详细的说明,感兴趣的朋友可以阅读《谈谈Linux内核驱动的coding style》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: