我的itop4412开发板是半路捡的,所以没办法加他们的售后群,遇到的问题只好一点点记录吧
内核驱动编译
在日常工作过程中,编写内核程序可能机会不多,但是将厂商提供的内核源码编译到固件中,这个技能还是必须掌握的。
itop4412的资料中有两个内核源码文件夹,咱们一个一个来认识下。
iTop4412_Kernel_3.0
这个应该是官网的源码
itop4412_kernel_4_14_2_bsp
这个是迅为缩减后的源码,里面有他们编写好的脚本咱们先已编译iTop4412_Kernel_3.0 为例
1.拿到源码后先把编译环境搭建下,配置编译环境,然后make编译源码
export PATH=$PATH:/usr/local/arm/arm-2009q3/bin
source .bashrc2.进入iTop4412_Kernel_3.0 打开Makefile,这里的参数要配置下194 export KBUILD_BUILDHOST := $(SUBARCH)195 ARCH ?= arm196 CROSS_COMPILE ?= /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-197 #CROSS_COMPILE ?= /usr/local/arm/4.5.1/bin/arm-none-linux-gnueabi-198 CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%)
```![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/805d492d295e4996ab0042131eb280e4.png)配置好后 make -j4 编译下,编译过程会遇到写问题,网上会解决方案这里自己写一个简单字符型驱动,并编译进内核在drivers/char 下创建文件夹 hello
创建三个文件 helloworld.c Kconfig Makefile
helloworld.c
#include <linux/init.h>
#include <linux/module.h>MODULE_LICENSE("Dual BSD/GPL");
MODULE_AUTHOR("GYY");static int hello_init(void)
{printk(KERN_EMERG "HELLO WORLD enter!\n");return 0;
}static void hello_exit(void)
{printk(KERN_EMERG "HELLO WORLD exit!\n");}module_init(hello_init);
module_exit(hello_exit);Kconfig
config HELLOtristate "hello world"help hello hello
Makefile
obj-$(CONFIG_HELLO)+=helloworld.o4.编辑char 文件夹下的Makefile 加上
obj-y += hello/
5.编辑char 文件夹下的Kconfig 加上source "drivers/char/hello/Kconfig"
6.然后回到源码主目录执行 make menuconfig ,在Character devices就可以看到自己写的驱动了,勾选下 然后编译就可以了在编译itop4412_kernel_4_14_2_bsp 源码时
报garbage following instruction – `dmb ish’解决:编译器问题。更换编译器即可。
sudo apt-get install gcc-arm-linux-gnueabi