文章目录
#1驱动模块移植过程
##1.1模块的第一种编译方法——改kconfig
- 第一步:改kconfig
文件在:Drivers/char/kconfig;
tristate三态表示可以编译在模块<M>
;
bool表示只能被选择编[*]
或不编[ ]
。
- 第二步:配置内核
make menuconfig
后会自动生成供编译的.config文件。
wuchengbing@ubuntu:~/linux/kernel-2.6.13$ make menuconfig
Device Drivers ---> Character devices --->
[*] S3C2410 RTC Driver │ │
<M> QQ2440/mini2440 LEDs Driver │ │
<M> QQ2440/mini2440 PWM beeper Driver │ │
<M> QQ2440/mini2440 Hello Module sample │ │
<M> QQ2440 Buttons
如果make menuconfig
没有出来该选项,可先cp config_n35 .config
->make
-> make menuconfig
,然后成生如下.config文件。
wuchengbing@ubuntu:~/linux/kernel-2.6.13$ gedit .config
# CONFIG_WATCHDOG is not set
# CONFIG_NVRAM is not set
# CONFIG_RTC is not set
CONFIG_S3C2410_RTC=y
CONFIG_QQ2440_LEDS=m
CONFIG_QQ2440_PWM_BEEPER=y
CONFIG_QQ2440_HELLO_MODULE=m
… …
如果选择是[*]
,即y
es,则该驱动在系统运行自动加载;如果选择是<M>
,则要使用该驱动要手工加载。
- 第三步:编译内核得到驱动模块
make
,后生成对应的驱动模块.ko
文件。
wuchengbing@ubuntu:~/linux/kernel-2.6.13$make
… …
LD vmlinux
SYSMAP System.map
SYSMAP .tmp_System.map
OBJCOPY arch/arm/boot/Image
Kernel: arch/arm/boot/Image is ready
AS arch/arm/boot/compressed/head.o
GZIP arch/arm/boot/compressed/piggy.gz
AS arch/arm/boot/compressed/piggy.o
CC arch/arm/boot/compressed/misc.o
LD arch/arm/boot/compressed/vmlinux
OBJCOPY arch/arm/boot/zImage
Kernel: arch/arm/boot/zImage is ready
Building modules, stage 2.
MODPOST
CC drivers/char/mini2440_backlight.mod.o
LD [M] drivers/char/mini2440_backlight.ko
CC drivers/char/qq2440_buttons.mod.o
LD [M] drivers/char/qq2440_buttons.ko
CC drivers/char/qq2440_hello_module.mod.o
LD [M] drivers/char/qq2440_hello_module.ko
CC drivers/char/qq2440_leds.mod.o
LD [M] drivers/char/qq2440_leds.ko
CC drivers/char/qq2440_pwm.mod.o
LD [M] drivers/char/qq2440_pwm.ko
wuchengbing@ubuntu:~/linux/kernel-2.6.13$
qq2440_leds.ko
wuchengbing@ubuntu:~/linux/kernel-2.6.13$ ls driver/char/
…
-rw-rw-r-- 1 wuchengbing wuchengbing