本文主要介绍如何搭建能编译出在九鼎创展x6818开发板上运行的驱动的环境。
1、编译内核
首先我们需要在x86电脑上搭建一个Linux系统的虚拟机,网上有很多教程,不再赘述。我使用的是Ubuntu16桌面版和VMware。
之后从九鼎创展官方给的链接
(https://pan.baidu.com/s/1EZL3lH8vMCV7toQ7KORNFA,提取码sg18)
下载X6818系统源码包DVD_X6818/source/x6818_linux_180209.tar.bz2,放到Linux虚拟机内解压(不要在共享文件夹或Linux以外的操作系统内解压)
在X6818系统源码包所在路径使用以下命令解压:
tar xf x6818_linux_180209.tar.bz2
用其他官方提供的系统源码包也可以,只要内核版本一样。
解压后使用以下命令调用官方脚本编译内核:
./x6818_linux_180209/mk -k
即使用官方提供的脚本mk,以-k为参数运行
2、编写Makefile
在你要编译的驱动源码同一文件夹下编写Makefile文件(参考https://blog.csdn.net/feixiaoxing/article/details/8533822):
ifneq ($(KERNELRELEASE),)
obj-m := 你的驱动源码文件名.o
else
PWD := $(shell pwd)
X6818 := 你解压并编译内核后的X6818系统源码包所在路径/x6818_linux_180209
KDIR := $(X6818)/linux/kernel/kernel-3.4.39
COMPL := $(X6818)/prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin/arm-eabi-
all:
$(MAKE) -C $(KDIR) M=$(PWD) modules CROSS_COMPILE=$(COMPL) ARCH=arm
clean:
rm -rf .*.cmd *.o *.mod.c *.ko .tmp_versions
endif
补充:COMPL指向的是系统源码包里自带的交叉编译器,也可以用不超过4.x版本的其他编译器(虽然没必要换)
KDIR变量指向的是内核,里面大概是这样的:
如果以后内核换了,就要自己找内核路径改写Makefile
3、执行编译
在你的驱动源码所在的路径下使用make指令即可得到"你的驱动源码文件名.ko"文件,即可以在X6818下使用insmod加载的驱动文件。当你要编译另一个驱动时,记得修改Makefile里的驱动源码文件名。
编写日期2022-07-25,X6818内核为3.4.39,自带arm-eabi-gcc-4.8,Makefile中的路径可能需要修改