内核编译一搞就是一个小时,只能干瞪眼,利用这点时间用一个最简单的驱动把近期学的东西做一个整理。
1,下载开发板对应的内核源码。我用的是ZCUO102开发板,下载网址为
记得选择对应的版本。我的板子里面的内核是2019.01,但是我下了2018.02的,耽误了不少事。
2,配置内核。
板子对应的交叉编译链是aarch64-linux-gnu-gcc。对应修改源码主目录下的Makefile。
搜索ARCH找到这两行,做出对应修改。
之后输出make menuconfig,进入内核配置界面,
把交叉编译链填入第一栏。保存退出。
寻找vermagic.h文件,打开后找VERMAGIC_STRING判断一下开发板内核版本与这个是否相同,在开发板输入uname -r,查看开发板内核版本。改成一样的。
我刚开始这里的vermagic是4.14.0,开发板是4.14.0-xilinx-v2018.2,最后加载驱动时候就报错了。后面那一串一个字符都不能少。后面那两个引号中间的空格也不能少,这个也报错过一次,心累。
3,编译内核。直接输入make就行。然后就是一个小时左右的等待。
4,编译内核的时间可以用来写个驱动。随便写在哪个文件夹都行,建议不要写在内核源码里,有特殊需求除外。建立一个文件夹,里面新建两个文件,一个hello.c,一个Makefile。分别写上
#include <linux/module.h>
#include <linux/init.h>
#include <linux/kernel.h>
MODULE_LICENSE("GPL");
MODULE_AUTHOR("tang");
static int hello_init(void)
{
printk("hello world!\n");
return 0;
}
static void hello_exit(void)
{
printk("goodbye!\n");
}
module_init(hello_init);
module_exit(hello_exit);
这段代码粘贴过来这个博客就会卡住,必须用word再复制一遍,烦。
然后是Makefile
KERN_DIR = /home/tang/Documents/bsp/xilinx-zcu102-2018.2/components/plnx_workspace/linux-xlnx-xilinx-v2018.2
all:
make -C $(KERN_DIR) M=`pwd` modules
clean:
make -C $(KERN_DIR) M=`pwd` modules clean
rm -rf modules.order
obj-m += hello.o
KERN_DIR需要改成你自己的内核源码对应的文件夹位置。
5,等内核make完毕后,在驱动文件夹内make一下,就可以生成hello.ko。
6,打开WINSCP,没有的话百度搜一下下载就行。我是用这个通过tftp把.ko文件传到开发板。你有别的办法也行。
输入ifconfig查看开发板的ip地址。
连上之后,把hello.ko拖到右边。就可以在开发板上找到这个文件。
不要问我为啥没printk,我暂时也不清楚。等我整明白了再写。