make命令只能在ap/project/$(CHIP_NAME)/prj_xxx/build目录运行 | |
make help for more infomation | |
以prj_watch为例 | |
1、AP版本编译需要获取ap、cp、build、pub、tools目录。 | |
2、完整大版本编译:make allclean all,等同make recovery normal命令。 | |
建议获取代码后完整编译一次,先编译recovery,再编译normal,编译后系统默认配置为normal版本。 | |
应用和库的编译依赖uClibc的编译,uClibc和应用busybox依赖内核头文件,所以应用和库单独编译之前,建议完整编译一次。 | |
3、增量编译命令 | |
normal版本编译:make normal,编译完成文件在project/zx297520v3/prj_watch/bin目录 | |
如果编译报错,代码修改后增量编译:make normal2 | |
recovery版本类似,make recovery版本出错后,代码修改后增量编译:make recovery2 | |
4、normal版本下,修改了cp侧代码,make ps kernel cpkoclean cpko rootfs copybin,或者可以用make normal2,后者编译时间稍长一点 | |
内核文件、调试vmlinux、带调试信息的cpko.ko在project/zx297520v3/prj_watch/bin目录,cp代码以ko文件体现在ap_rootfs.img。 | |
5、normal版本下,修改了内核代码,运行make kernel cpkoclean cpko rootfs copybin,或者可以用make kernel2, | |
内核文件和调试vmlinux在project/zx297520v3/prj_watch/bin目录,要同时烧录ap_cpuap.bin和ap_rootfs.img文件,ap_cpuap.bin和ap_rootfs.img(包含cpko.ko)不配套会开机死机。 | |
5.1 normal版本下,修改了原生内核ko代码,make kernel rootfs copybin,或者可以用make normal2,后者编译时间稍长一点 | |
内核文件和调试vmlinux 带调试信息的ko文件在project/zx297520v3/prj_watch/bin目录,ko体现在ap_rootfs.img文件里。 | |
6、normal版本下,修改了lib代码,make appclean lib app rootfs copybin,或者可以用make normal2 | |
ap_rootfs.img为根文件系统,在project/zx297520v3/prj_watch/bin目录 | |
如果app用了lib的静态库,app的Makefile发现不了依赖,所以最好appclean一下 | |
解决库编译错误,可以make zte_lib=libnvram lib方式,这样只编译libnvram应用 | |
make zte_lib=libnvram libclean只清空libnvram的编译 | |
7、normal版本下,修改了app代码,make app rootfs copybin,或者可以用make normal2 | |
ap_rootfs.img为根文件系统,在project/zx297520v3/prj_watch/bin目录 | |
解决应用编译错误,可以make zte_app=appdemo app方式,这样只编译appdemo应用 | |
make zte_app=appdemo appclean只清空appdemo应用的编译 | |
8、修改rc脚本 | |
rc脚本位置: | |
normal版本:ap/project/zx297520v3/prj_watch/fs/normal/rootfs/etc/rc | |
修改后,make rootfs copybin | |
ap_rootfs.img为根文件系统,在project/zx297520v3/prj_watch/bin目录 | |
recovery版本:ap/project/zx297520v3/prj_watch/fs/normal/rootfs/recovery/etc/rc | |
为了节省空间,recovery模式没有单独的根文件系统分区,修改后重新编译normal版本即可。 | |
9、修改内核配置 | |
make all或make normal完整编译一次后,运行make kernel_menuconfig打开内核配置窗口 | |
配置保存后将ap/os/linux/linux-3.4.x/.config信息同步到ap/project/zx297520v3/prj_watch/config/normal/config.linux | |
recovery版本类似 | |
10、修改busybox的配置 | |
make normal完整编译一次后,在ap/app/busybox/build目录运行make menuconfig。 | |
配置保存后将ap/app/busybox/build/.config信息同步到ap/project/zx297520v3/prj_watch/config/normal/config.busybox | |
recovery版本没有单独的根文件系统,recovery版本的busybox存放在normal的根文件系统里。 | |
make normal完整编译一次后,在ap/app/busybox_recovery/build目录运行make menuconfig。 | |
配置保存后将ap/app/busybox_recovery/build/.config信息同步到ap/project/zx297520v3/prj_watch/config/normal/config.busybox_recovery | |
11、cp侧包含内核头文件:直接包含 | |
Makefile里头文件路径增加:-I$(LINUX_DIR)/include | |
12、内核包含cp侧头文件,要先包含cp_types.h,这里包含cp侧的基本数据类型定义。 | |
比如psbuf.h | |
Makefile里: | |
ccflags-y += -I/$(CP_ROOT_DIR)/ps/modem/com/inc | |
C文件: | |
#include <linux/cp_types.h> | |
#include "psbuf.h" | |
13、应用和库的Makefile要包含COMMON_BASE_MK或COMMON_MK。 | |
经过configure生成Makefile的开源应用和库建议包含COMMON_BASE_MK,因为某些开源应用如果CFLAGS里包含宏定义会导致configure失败。 | |
ZTE自研应用包含COMMON_MK。COMMON_MK比COMMON_BASE_MK多定义了一些ZTE应用需要的特殊宏。 | |
14、default_parameter_*文件位于ap/project/zx297520v3/prj_watch/fs/normal/rootfs/etc_ro/default目录 | |
15、无论是normal版本还是recovery版本,根文件系统都是只读(ro)挂载的,如果要修改成可写用于调试,可以运行mount -o remount,rw /将根文件系统重新挂载为可写(rw) | |
16、ap侧nv配置说明 | |
1)、注释和nv设置都是每行一条,换行符要求是linux格式(\n) | |
2)、注释行第一个字符必须是英文"#"号 | |
3)、nv配置格式为:key=value,key和value可以包含空格,配置要小心,特别是key和value字符串首尾的空格,也是允许的 | |
4)、只有在default_parameter_sys和default_parameter_user配置的nv项才会保存到flash,否则关机会丢失。可以用key=不设置value来预设nv项 | |
5)、default_parameter_ro配置的nv项不对外开放,只用于生产相关 | |
6)、nv show不显示default_parameter_ro配置的nv项,nv get和nv set命令也不能获取和设置default_parameter_ro的nv项,cfg_get_item()和cfg_set()函数接口也不能操作 | |
17、共核宏CONFIG_SINGLECORE,使用范围:linux应用、linux库、linux内核和协议栈代码 | |
18、linux操作系统宏:_OS_LINUX,使用范围:linux应用、linux库和协议栈。开源代码建议按照原来的风格使用__linux__、linux。 | |
19、修改完内核或busybox的config配置后,可以通过执行make normal_conf生效。 | |
重点编译命令: | |
normal版本修改代码后make normal2增量编译 | |
recovery版本修改代码后make recovery2增量编译 |