HI3559AV100调试记录
内核编译与烧写
- 内核版本4.9.37,Linux内核源码如下
- 编译
make ARCH=arm64 CROSS_COMPILE=aarch64-himix100-linux- uImage -j12
,编译完成结果如下,编译完成后会在arch/arm64/boot/生成UImage - arm-trusted-firmware目录中运行mk.sh生成fip.bin
- 主机搭建tftp服务器,将fip.bin拷贝到共享目录
- 进入uboot,配置ethact ipaddr serverip环境变量
- 从tftp加载内核,测试内核是否能启动、
1
2tftp fip.bin 0x42000000
bootm 0x42000000 - 烧写内核到emmc
1
2
3tftp fip.bin 0x42000000
mmc dev 0 0
mmc write 0 0x42000000 800 4800
驱动调试
- 参照正点原子教程搭建驱动调试环境,配置的Makefile内容如下
1
2
3
4
5
6
7
8
9
10
11KERNEL_DIR = /home/jack/hisi/minimum_system/linux-4.9.y_multi-core
CURRENT_PATH = $(shell pwd)
obj-m := gpio-pca953x.o
build: kernel_modules
kernel_modules:
$(MAKE) ARCH=arm64 CROSS_COMPILE=aarch64-himix100-linux- -C $(KERNEL_DIR) M=$(CURRENT_PATH) modules
clean:
$(MAKE) ARCH=arm64 CROSS_COMPILE=aarch64-himix100-linux- -C $(KERNEL_DIR) M=$(CURRENT_PATH) clean - KERNEL_DIR表示Linux内核源码目录,使用绝对路径
- CURRENT_PATH表示当前路径,直接使用pwd来获取当前路径
- obj-m表示将这个c文件编译为ko模块
- modules表示编译模块,*-C*表示将当前的工作目录切换到指定目录中, M表示模块源码目录
- make modules命令中加入 M=dir 以后程序会自动到指定的 dir 目录中读取模块的源码并将其编译为.ko 文件