ubuntu 12.04驱动开发环境配置
1.在终端运行#uname-r查看现有的内核的版本,本人ubuntu12.04的是3.2.0.30-generic
2.用下面指令查看可用的源码包:#sudoapt-cachesearchlinux-source
得到的结果是
linux-source-LinuxkernelsourcewithUbuntupatches
linux-source-3.2.0-Linuxkernelsourceforversion3.2.0withUbuntupatches
3.在Ubuntu中可以通过下面这个命令下载:
#apt-getinstalllinux-source-(版本号)
#sudoapt-getinstalllinux-source-3.2.0
4.下载后的文件linux-source-3.2.0.tar.bz2在/usr/src目录中,解压:
#cd/usr/src/
#tarjxvflinux-source-3.2.0.tar.bz2
解压后在/usr/src目录下产生了一个linux-source-3.2.0源码目录
5.#cdlinux-source-3.2.0
#makeconfig或#makemenuconfig或者#cp../linux-headers-3.2.0.30-generic/.config./.config
6.sudomakeoldconfig
7.make
如果有下列错:
ERROR:"__modver_version_show"[drivers/staging/rts5139/rts5139.ko]undefined!
WARNING:modpost:Found11sectionmismatch(es).
Toseefulldetailsbuildyourkernelwith:
'makeCONFIG_DEBUG_SECTION_MISMATCH=y'
make[1]:***[__modpost]错误1
make:***[modules]错误2
修改.config文件:changingCONFIG_RTS5139=n
make
8.#makemodule_install
执行结束之后,会在/lib/modules下生成新的目录/lib/modules/3.2.40
9.#makeinstall
10.使用新编译的内核
Ubuntu采用Grub引导,要使用新内核,必须配置grub。
1)更改grub配置,显示启动菜单
#gedit/etc/default/grub
注释GRUB_HIDDEN_TIMEOUT=0语句,及改成#GRUB_HIDDEN_TIMEOUT=0后保存
2)更新启动配置文件
#update-grub
11.修改/boot/grub/grub.cfg文件,修改你喜欢的内核版本顺序
#reboot
12.使用#uname-r查看内核版本是否已修改。
编写简单的helloworld测试
1.hello.c
#include<linux/init.h>
#include<linux/module.h>
MODULE_LICENSE("DualBSD/GPL");
staticinthello_init(void)
{
printk(KERN_ALERT"Hi,girldoyourememberme!\n");
return0;
}
staticvoidhello_exit(void)
{
printk(KERN_ALERT"Imissyousomuch\n");
}
module_init(hello_init);
module_exit(hello_exit);
2.Makefile
obj-m:=hello.o
KERNELDIR:=/lib/modules/3.2.40/build
PWD:=$(shellpwd)
modules:
$(MAKE)-C$(KERNELDIR)M=$(PWD)modules
modules_install:
$(MAKE)-C$(KERNELDIR)M=$(PWD)modules_install
3.进入hello.c所在目录make,生成hello.ko文件
4.sudoinsmodhello.ko
如果成功,则运行#dmesg|tail
应有:Hi,girldoyourememberme!的log!
goodluck!