找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 1804|回复: 7

OpenWrt下kernel配置文件疑问

[复制链接]
本帖最后由 luofuchong 于 2021-12-20 11:48 编辑

OpenWrt下,kernel配置文件分3层(甚至4层),比如:
1、底层是target/linux/generic/config-4.9
2、中间层是target/linux/[target]/config-4.9
3、还有一层是target/linux/[target]/[profile]/config-4.9

而且,我发现:
1、make kernel_menuconfig会调用LINUX_RECONF_CMD,把上面的1和2层合并成内核根目录下的.config;
2、make V=s编译会调用LINUX_CONF_CMD,把上面的1、2和3层合并成内核根目录下的.config

我理解OpenWrt为了避免重复造轮子,把通用的内核配置归类到generic,把target相关的安排在target目录下,可是这样给我带来的2个困扰:
1、为什么make kernel_menuconfig后得到的.config不是最终make编译用的.config,是有意而为之?
2、如果我要把OpenWrt移植到一个新的cpu平台下,那target下的config-xx如何获取?是先touch一个target下的空config-xx文件,然后make kernel_menuconfig,
再手动在上面增加target相关配置,然后menuconfig界面下保存配置,让脚本通过内部的LINUX_RECONF_DIFF命令,生成target下的config-xx文件内容?
3、另外,那profile下的config-xx文件内容,只能自己手动填写?

刚接触OpenWrt没多久,对于OpenWrt下kernel的config配置这块一直没搞明白,在wiki下也没搜到答案,还请各位大牛多多指点一下,谢谢!

我的恩山、我的无线 The best wifi forum is right here.
你这个问题应该去openwrt官方论坛去提。哈哈
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

这里基本是小白和伸手党
我提示下吧
scripts/kconfig.pl
LZ了解下

点评

感谢提醒,知道kconfig.pl,可是对python不了解,没深入看。看来学习完lua后,还得学习python~_~  详情 回复 发表于 2021-12-21 17:37
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| | 显示全部楼层
rtlhq 发表于 2021-12-20 22:59
这里基本是小白和伸手党
我提示下吧
scripts/kconfig.pl

感谢提醒,知道kconfig.pl,可是对python不了解,没深入看。看来学习完lua后,还得学习python~_~

点评

这是 perl 脚本而不是 python 你所说的 scripts/kconfig.pl 就实现了  详情 回复 发表于 2021-12-21 18:34
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

luofuchong 发表于 2021-12-21 17:37
感谢提醒,知道kconfig.pl,可是对python不了解,没深入看。看来学习完lua后,还得学习python~_~

这是 perl 脚本而不是 python
你所说的 scripts/kconfig.pl 就实现了

点评

好的,非常感谢!  详情 回复 发表于 2021-12-22 10:32
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| | 显示全部楼层
rtlhq 发表于 2021-12-21 18:34
这是 perl 脚本而不是 python
你所说的 scripts/kconfig.pl 就实现了

好的,非常感谢!
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| | 显示全部楼层
"include/target.mk"下:

__linux_confcmd = $(SCRIPT_DIR)/kconfig.pl $(2) $(patsubst %,+,$(wordlist 2,9999,$(1))) $(1)

LINUX_CONF_CMD = $(call __linux_confcmd,$(LINUX_KCONFIG_LIST),)
LINUX_RECONF_CMD = $(call __linux_confcmd,$(LINUX_RECONFIG_LIST),)
LINUX_RECONF_DIFF = $(call __linux_confcmd,$(filter-out $(LINUX_RECONFIG_TARGET),$(LINUX_RECONFIG_LIST)),'>')

我看了kconfig.pl,它只是一个实现"LINUX_CONF_CMD、LINUX_RECONF_CMD、LINUX_RECONF_DIFF" 的脚本,如何从多个内核配置文件合并成make menuconfig和make所使用的内核.config,以及make kernel_menuconfig下修改配置后保存的diff操作。

可是仍然没有解答我的疑问:
1、为什么make kernel_menuconfig后得到的.config不是最终make编译用的.config,是有意而为之?
2、如果我要把OpenWrt移植到一个新的cpu平台下,那target下的config-xx如何获取?是先touch一个target下的空config-xx文件,然后make kernel_menuconfig,
再手动在上面增加target相关配置,然后menuconfig界面下保存配置,让脚本通过内部的LINUX_RECONF_DIFF命令,生成target下的config-xx文件内容?
3、另外,那profile下的config-xx文件内容,只能自己手动填写?
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| | 显示全部楼层
本帖最后由 luofuchong 于 2021-12-24 09:51 编辑

还是让我来结束这个贴吧(按照我目前的理解,虽然不一定准确):
1、为什么make kernel_menuconfig后得到的.config不是最终make编译用的.config,是有意而为之?
答:是有意而为之的,因为最终make用到的内核.config,除了generic、target、profile外,openwrt自身还会加入一些配置,也会加入module.mk下用户添加的一些内核配置,所以make kernel_menuconfig所生成的.config,只能说是最终使用的内核.config的一个子集而已,详细见“include/kernel-defaults.mk”脚本下的以下操作:
  1. define Kernel/Configure/Default
  2.     rm -f $(LINUX_DIR)/localversion
  3.     $(LINUX_CONF_CMD) > $(LINUX_DIR)/.config.target
  4. # copy CONFIG_KERNEL_* settings over to .config.target
  5.     awk '/^(#[[:space:]]+)?CONFIG_KERNEL/{sub("CONFIG_KERNEL_","CONFIG_");print}' $(TOPDIR)/.config >> $(LINUX_DIR)/.config.target
  6.     echo "# CONFIG_KALLSYMS_EXTRA_PASS is not set" >> $(LINUX_DIR)/.config.target
  7.     echo "CONFIG_KALLSYMS_UNCOMPRESSED=y" >> $(LINUX_DIR)/.config.target
  8.     $(SCRIPT_DIR)/package-metadata.pl kconfig $(TMP_DIR)/.packageinfo $(TOPDIR)/.config $(KERNEL_PATCHVER) > $(LINUX_DIR)/.config.override
  9.     $(SCRIPT_DIR)/kconfig.pl 'm+' '+' $(LINUX_DIR)/.config.target /dev/null $(LINUX_DIR)/.config.override > $(LINUX_DIR)/.config.set
  10.     $(call Kernel/SetNoInitramfs)
  11.     rm -rf $(KERNEL_BUILD_DIR)/modules
  12.     cmp -s $(LINUX_DIR)/.config.set $(LINUX_DIR)/.config.prev || { \
  13.         cp $(LINUX_DIR)/.config.set $(LINUX_DIR)/.config; \
  14.         cp $(LINUX_DIR)/.config.set $(LINUX_DIR)/.config.prev; \
  15.     }
复制代码




2、如果我要把OpenWrt移植到一个新的cpu平台下,那target下的config-xx如何获取?是先touch一个target下的空config-xx文件,然后make kernel_menuconfig,
再手动在上面增加target相关配置,然后menuconfig界面下保存配置,让脚本通过内部的LINUX_RECONF_DIFF命令,生成target下的config-xx文件内容?(这里有个极端的情况,就是没有同样target的内核config-xx可复制来使用)
答:基本不会出现极端的情况,大部分开发者都是基于现有的target下开发不同的subtarget和profile,直接拷贝现有target的config-xx在上面改就行(make kernel_menuconfig修改配置后保存即会更新这个拷贝的target的config-xx到您希望的样子),真碰到没有的target,我的理解就是建一个空的自己make kernel_menuconfig在上面手动的加。


3、另外,那profile下的config-xx文件内容,只能自己手动填写?
答:我的理解是的,当然profile下内容不多,一般就是用来区分板卡的配置而已。

点评

补充:找到一个更香的解决方法(修改脚本,使用外部kernel_config)  详情 回复 发表于 2022-8-12 17:00
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

欢迎大家光临恩山无线论坛上一条 /1 下一条

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-4-28 15:25

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 举报电话:0519-86695797

快速回复 返回顶部 返回列表