16-Openwrt patch生成
在开源模块的基础上修改代码,更多的时候是通过打补丁的方式进行修改。
1.内核patch生成
1.1 编译内核模块命令
vim 19.07/target/linux/Makefile
prereq clean download prepare compile install menuconfig nconfig oldconfig update refresh: FORCE
@+$(NO_TRACE_MAKE) -C $(BOARD) $@
清空内核:
make target/linux/clean V=s
解压内核:
make target/linux/prepare V=s
编译,拷贝内核头文件到工具链/19.07/staging_dir/toolchain-aarch64_cortex-a53_gcc-8.3.0_musl/include/linux$
中
make target/linux/install V=99
放在
/19.07/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/linux-4.19.81/include/uapi
下面的头文件都会被拷贝到19.07/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/linux-4.19.81/user_headers
下面,最后拷贝到/19.07/staging_dir/toolchain-aarch64_cortex-a53_gcc-8.3.0_musl/include/linux$
中
1.2 生成patch
新建两个目录,原始linux-4.19.81.org/和修改后的linux-4.19.81/
使用如下命令生成patch
diff -Naur linux-4.19.81.org/ linux-4.19.81/ > 3001-add-xxx-support.patch
拷贝到对应的target/linux下
19.07/target/linux/mediatek/patches-4.19/
之后编译的时候,会根据前缀的数值大小一个一个打补丁到源码下面。
2.应用package生成
2.1 编译package模块命令
vim 14.07/package/Makefile文件里有如下定义:
$(eval $(call stampfile,$(curdir),package,prereq,.config))
$(eval $(call stampfile,$(curdir),package,cleanup,$(TMP_DIR)/.build))
$(eval $(call stampfile,$(curdir),package,compile,$(TMP_DIR)/.build))
$(eval $(call stampfile,$(curdir),package,install,$(TMP_DIR)/.build)
清空:
make package/network/services/uhttpd/clean V=99
解压,打patch
make package/network/services/uhttpd/prepare V=99
编译:
make package/network/services/uhttpd/compile V=99
安装,拷贝
make package/network/services/uhttpd/install V=99
2.2 生成patch
新建两个目录,原始uhttpd-2019-08-17-6b03f960.org/和修改后的uhttpd-2019-08-17-6b03f960.81/
使用如下命令生成patch
diff -Naur uhttpd-2019-08-17-6b03f960.org/ uhttpd-2019-08-17-6b03f960/ > 1001-add-xxx-support.patch
在package下面新建patches目录
19.07$ ls package/network/services/uhttpd/
files Makefile patches
将生成出来的1001-add-xxx-support.patch拷贝到patches即可。