编写第一个linux驱动程序
和大多数初学者一样,都是从helloword入手,关键是熟悉这个流程
首先介绍我的环境,Ubuntu14 64位win10主机。linux内核 为3.16.0-73-generic。可使用uname -r 指令查看。编译的内核版本为linux2.6.32
思路
这里是动态加载,也就时生成module.ko文件,然后手动加载进内核。
首先将你的驱动配好Makefile和Kconfig。
然后将这两个关联到drivers下的makefile和Kconfig。这样才会出现到menuconfig的界面上。
然后在linux核源码下,将友善之臂的源码.config拷贝到当前.config.然后make menuconfig
。然后make zImage. 在make modules.或者直接make。
如果使用make mrproper了,要重新配置.config。直接从官方下载的linux源码会出错,建议用厂商的,比如我用的是友善之臂的。
如果用make clean,则不用make mrproper。比如 在你的驱动路径下新键一个驱动程序,同时只要在同目录下配好makefile和Kconfig就可以。然后回到linux内核源码linux2.6.32的路径下使用make clean 清除以前生成的 (不清除.config).o等各类连接文件。然后使用make menuconfig 会将最新的配置写到.config里边去,然后退出时保存,直接make即可生成新的驱动文件。
我在/home/user/下 新建了一个文件夹用来存放内核, 使用指令 mkdir kernel
将下载的内核文件夹放到此处,并使用 tar xvzf 解压此文件夹。解压完后生成文件夹
linux-2.6.32.2/ cd 进入路径。在drivers下 新建自己的驱动文件夹,mydriver,在其文件夹下需要一个hello.c这是个驱动文件。
Hello.c
/*************************************************************************
> File Name: test.c
> Author: yuhs
> Mail: @qq.com
> Created Time: 2016年10月21日 星期五 19时08分09秒
************************************************************************/
/* hello.c */
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("leo BSD/GPL");
static int hello_init(void)
{
printk(KERN_ALERT "Hello, world\n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT "Goodbye, Hello world\n");
}
module_init(hello_init);
module_exit(hello_exit);
另外要准备一个Makefile 和 Kconfig,这两个是编译的连接文件,在menuconfig时会观察到,。
Makefile 如下
#
# Makefile
#
FONTMAPFILE = cp437.uni
obj-$(CONFIG_HELLO) += hello.o
obi-$(CONFIG_HELLO_MODUE) +=hello_modue.o
Kconfig 如下
#
# my driver test configuration
#
config HELLO
tristate "my_driver_test"
default m
help
this is my driver test
menu "hello_modue"
comment "hello_modue"
config HELLO_MODUE
tristate "hello_modue_test"
default m
endmenu
然后在drivers的目录下 分别打开Makefile 和 Kconfig并加入刚才的驱动。
makefile 如下
最新评论