编写第一个驱动程序hello world
先把内核源码放进去,OK6410的光盘自带了,FORLINX_linux-3.0.1.tar.gz
tar zxvf FORLINX_linux-3.0.1.tar.gz解压
然后放进/usr/src/目录
由于之前疏忽,把printk大成printf...结果提示stdio.h: no such file or directory
百度到方法说安装下面两个
apt-get install libc6-dev
apt-get install libmysqlclient15-dev
装好后提示内核配置错误....那就编译一下内核吧
make oldconfig
make prepare
make
三步,编译一个内核,编译好后在arch/arm/boot里面
hello.c
#include<linux/init.h>
#include<linux/module.h>
void hello_init()
{
printk("hello world\n");
printk("I will win the world\n");
}
void hello_exit()
{
printk("Good Bye\n");
}
module_init(hello_init);
module_exit(hello_exit);
Makefile
obj-m:=hello.o #将驱动编译成动态链接模块,名字是hello.o
KERNELDIR?=/usr/src/linux-3.0.1
DEFAULT:
$(MAKE) -C $(KERNELDIR) M=$(shell pwd) modules #$(MAKE) -C $(KERNELDIR)的意思是进入变量KERNELDIR中的目录自行make命令
#M=$(shell pwd) modules 通过pwd命令获取驱动源码的地址,当需要编译成模块的时候返回
clean:
rm -rf *.o *~*.ko *.mod.c *.order *.symvers
注:
obj-m 编译成模块
obj-y编译进内核
obj-n 不编译
编译好后,把hello.ko放进SD卡
OK6410上运行
insmod hello.ko加载驱动
lsmod查看