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!