-
一个Makefile实例
Makefile规则比较复杂,小白只能一点点学习,这里以一个Makefile实例说明Makefile的一般结构
include $(TOPDIR)/rules.mk#一般在 Makefile 的开头 PKG_NAME:=ralink-wifi-mt7688#表示软件包名称,将在 menuconfig 和 ipkg 可以看到 PKG_RELEASE:=1#表示软件包版本号 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) PKG_INSTALL_DIR:=$(PKG_BUILD_DIR)/ipkg-install include $(INCLUDE_DIR)/kernel.mk#文件对于软件包为内核时是不可缺少 include $(INCLUDE_DIR)/package.mk#一般在软件包的基本信息完成后再引入 define Package/ralink-wifi-mt7688#编译包定义,应用程序软件包使用Package,內核驱动使用KernelPackage SUBMENU:=Ralink #进行分类 可以在make menuconfig中看到 FILES:=$(PKG_BUILD_DIR)/ralink-wifi-mt7688.ko#模块文件 TITLE:=Ralink APSoC WiFi SoftAP driver DEPENDS:=@TARGET_ramips_mt7688 +wireless-tools +maccalc #所需的依赖 endef define Package/ralink-wifi-mt7688/description#描述 Ralink APSoC WiFi driver for DreamBox endef define Build/Prepare#编译前准备工作 mkdir -p $(PKG_BUILD_DIR) $(CP) ./src/* $(PKG_BUILD_DIR)/ $(Build/Patch) $(if $(QUILT),touch $(PKG_BUILD_DIR)/.quilt_used) endef define Build/Compile#进行编译 cd $(LINUX_DIR); \ ARCH=mips CC=$(TARGET_CC) \ $(MAKE) M=$(PKG_BUILD_DIR)/rt2860v2_ap/ V=1 modules endef define Package/ralink-wifi-mt7688/install $(INSTALL_DIR) $(1)/lib/modules/$(LINUX_VERSION) $(1)/etc/Wireless/RT2860/ $(CP) -rf ./files/* $(1)/ $(CP) modules/* $(1)/lib/modules/$(LINUX_VERSION) endef $(eval $(call BuildPackage,ralink-wifi-mt7688))
以上实例是我在网上搬一个wifi驱动时的驱动文件,当我按照教程将整个驱动文件置于package目录下后,make menuconfig能够看到menu增加了Ralink项目,但无法加载其中的内容,我百思不得其解。
首先怀疑的是否是路径问题,但仔细排查,这里并没有绝对路径,因此应该不是路径的问题。
再注意到DEPENDS的内容,怀疑是依赖文件缺失因此加载不起来,这里有@TARGET_ramips_mt7688 +wireless-tools +maccalc三个依赖,通过make menuconfig仔细查找到wireless-tools +maccalc勾选后,还是不行。
最后一个TARGET_ramips_mt7688 没看明白什么意思,后来好像是网上搜了搜,make menuconfig的target没有勾选mt7688选项,但是拉的代码本来就没这个mt7688,而是mt76x8,咋办?暴力一点直接将@TARGET_ramips_mt7688改为@TARGET_ramips_mt76x8,这样子果然解决了问题。(这是个wifi驱动,驱动与内核有关,不是随便搬来就能用的,这种操作是错误的,果不其然,固件写到板子后wifi并没驱动起来,报bug)
-
linux中的make menuconfig
Linux的代码配置项由Kconfig来完成的,关于Kconfig语法可参见:linux/Documentation/kbuild/kconfig-language.txt。在编译时,先进行配置,目的是根据需求选择功能以及编译生成方式类型(模式或包含在内核中),配置项操作可以由如下命令中的其中一条来完成
- make config:这个要求你手动选择所有配置项,配置完成后生成.config文件
- make menuconfig:显示以curses的图形配置菜单,当已有.config文件存在时,它会根据.config文件设定默认项。若不存在.config文件,则根据各级Kconfig文件来设定菜单项,完成配置后生成.config文件
- make oldconfig:与make menuconfig相同,区别在于这个没有图形界面,当已有.config文件存在时,它根据.config文件设定默认项,若kconfig有新配置项时,会提示你进行选择,若不存在.config文件,则根据各级Kconfig文件来设定菜单项,完成配置后生成.config文件。若已存在.config文件, make menuconfig及make oldconfig都会把原.config另存为.config.old
- make xx_defconfig: 一般源码中都有不同硬件平台的默认配置文件,你也可以制做自己的默认配置文件,当这个命令执行时,它会根据kconfig及xx_defconfig来生成.config文件。在执行完其中一条config命令后,会生成.config及autoconf文件,autoconf是根据配置项生成的相应宏定义,供makefile使用,当执行make命令时,就会根据autoconf定义的宏及makefile去编译源码
-
参考链接
Linux中的 make config, make menuconfig, make oldconfig, make xx_defconfig
openwrt之一个Makefile实例
猜你喜欢
转载自blog.csdn.net/robothj/article/details/84566167
今日推荐
周排行