嵌入式linux 内核驱动程序模块编译及其操作流程
2014-08-05 23:13
239 查看
本笔记,是介绍嵌入式linux的驱动程序模块不同于运行于用户的应用程序,现在介绍的是运行于内核态的驱动程序的编译及运行流程,不介绍如何编写。此程序的运行,基于mini2440开发板
step 1:
编写一个运行于内核的驱动程序
随便写一个最简单的程序,并命名为 amwjie72.c
_______________________________________________________________
|
| #include <linux/kernel.h>
| #include <linux/module.h>
|
| static int __init module_init(void)
| {
| printk("Hello, module is installed !\n");
| return 0;
| }
|
| static void __exit module_cleanup(void)
| {
| printk("Good-bye, module was removed!\n");
| }
|
| module_init(module_init);
| module_exit(module_cleanup);
| MODULE_LICENSE("GPL");
|______________________________________________________________
step 2:
把编写的 amwjie72.c 拷贝到内核根目录
/drivers/char下
step 3:
修改 char 目录下的 Kconfig 文件,使其在配置内核的时候
能进行选择。
______________________________________________________________
|
| config AMWJIE72
| tristate "first module"
| help
| for more information,please sent E-mail to
| amwjie72@163.com
|______________________________________________________________
step 4:
回到linux内核的根目录下,执行
make menuconfig
---> Device Drivers ---> Character devices
--->first module
选为 M 后。再保存退出
【注】 此步,必须在根目录下有一个内核的配置文件.
step 5:
在linux内核根目录下,/drivers/char 打开Makefile
加入如下:
_______________________________________________________________
|
| obj-$(AMWJIE72) +=amwjie72.o
|______________________________________________________________
把内核配置信息与真正的源代码联系起来
step 6:
在内核根目录下
执行
make modules
在内核根目录下/drivers/char 下会生成amwjie72.ko模块文件
此文件,可下载到开发板上运行
【注】:1> 在修改Kconfig 文件时 AMWJIE72 可随意命名,
但要与Makefile文件里的括号内一致,以此建立联系
2> amwjie72.ko 文件下到开发板要想运行起来,还必须
要所用内核包括对该模块文件的支持,即要将内核
编译后,再下载进去。
step 7:
编译内核
在内核根目录下执行
make zImage
在内核根目录下/arch/arm/boot 下会生成zImage文件
step 8:
将 zImage 与 amwjie72.ko 拷贝到 windows 环境下
step 9:
将 开发板 置于 NOR FLASH 启动方式
进入BIOS 界面后,选择 [k] 功能,用 DNW 来传送内核(zImage)
BIOS 会自动烧写内核到Nand Flash 分区中
step 10:
用 rz 命令,并用串口发送 amwjie72.ko文件到开发板
step 11:
用 chmod 命令来改变文件权限
执行
chmod +x amwjie72.ko
step 12:
再将模块文件复制到/lib/modules/2.6.29.4-FriendlyARM目录
step 13
使用如下两个命令来装载和卸载模块
1>: modprobe amwjie72
2>: rmmod amwjie72
【注】 如上两命令,不再需要加“.ko” 尾缀了
【[注]】:
如要再修改驱动程序模块,无须再次编译内核
只要修改了驱动程序后。再重复step 6,10,11,12
step 1:
编写一个运行于内核的驱动程序
随便写一个最简单的程序,并命名为 amwjie72.c
_______________________________________________________________
|
| #include <linux/kernel.h>
| #include <linux/module.h>
|
| static int __init module_init(void)
| {
| printk("Hello, module is installed !\n");
| return 0;
| }
|
| static void __exit module_cleanup(void)
| {
| printk("Good-bye, module was removed!\n");
| }
|
| module_init(module_init);
| module_exit(module_cleanup);
| MODULE_LICENSE("GPL");
|______________________________________________________________
step 2:
把编写的 amwjie72.c 拷贝到内核根目录
/drivers/char下
step 3:
修改 char 目录下的 Kconfig 文件,使其在配置内核的时候
能进行选择。
______________________________________________________________
|
| config AMWJIE72
| tristate "first module"
| help
| for more information,please sent E-mail to
| amwjie72@163.com
|______________________________________________________________
step 4:
回到linux内核的根目录下,执行
make menuconfig
---> Device Drivers ---> Character devices
--->first module
选为 M 后。再保存退出
【注】 此步,必须在根目录下有一个内核的配置文件.
step 5:
在linux内核根目录下,/drivers/char 打开Makefile
加入如下:
_______________________________________________________________
|
| obj-$(AMWJIE72) +=amwjie72.o
|______________________________________________________________
把内核配置信息与真正的源代码联系起来
step 6:
在内核根目录下
执行
make modules
在内核根目录下/drivers/char 下会生成amwjie72.ko模块文件
此文件,可下载到开发板上运行
【注】:1> 在修改Kconfig 文件时 AMWJIE72 可随意命名,
但要与Makefile文件里的括号内一致,以此建立联系
2> amwjie72.ko 文件下到开发板要想运行起来,还必须
要所用内核包括对该模块文件的支持,即要将内核
编译后,再下载进去。
step 7:
编译内核
在内核根目录下执行
make zImage
在内核根目录下/arch/arm/boot 下会生成zImage文件
step 8:
将 zImage 与 amwjie72.ko 拷贝到 windows 环境下
step 9:
将 开发板 置于 NOR FLASH 启动方式
进入BIOS 界面后,选择 [k] 功能,用 DNW 来传送内核(zImage)
BIOS 会自动烧写内核到Nand Flash 分区中
step 10:
用 rz 命令,并用串口发送 amwjie72.ko文件到开发板
step 11:
用 chmod 命令来改变文件权限
执行
chmod +x amwjie72.ko
step 12:
再将模块文件复制到/lib/modules/2.6.29.4-FriendlyARM目录
step 13
使用如下两个命令来装载和卸载模块
1>: modprobe amwjie72
2>: rmmod amwjie72
【注】 如上两命令,不再需要加“.ko” 尾缀了
【[注]】:
如要再修改驱动程序模块,无须再次编译内核
只要修改了驱动程序后。再重复step 6,10,11,12
相关文章推荐
- linux 编译内核操作流程 ──为新手指南
- 编译内核操作流程 ──为新手指南
- [转]编译内核操作流程
- linux、内核源码、内核编译与配置、内核模块开发、内核启动流程
- 编译时向内核添加新设备 模块的方式动态的将驱动加入内核,但这种方式加入的驱动程序,当系统重新启动时, 还需要重新用模块的方式进行插入,如果是系统内常用的设备驱动采用这种方式进行加载, 就会很不方便。
- 内核管理 之 编译内核操作流程 ──为新手指南
- Linux编译内核操作流程 ——为新手指南
- linux、内核源码、内核编译与配置、内核模块开发、内核启动流程(转)
- Linux驱动程序模块编译流程
- linux、内核源码、内核编译与配置、内核模块开发、内核启动流程
- linux、内核源码、内核编译与配置、内核模块开发、内核启动流程
- linux基础(27)--内核编译、内核模块操作--RHEL6.5
- 编译内核操作流程 ──为新手指南
- linux、内核源码、内核编译与配置、内核模块开发、内核启动流程
- 在Linux 2.6内核下编译可以加载的内核模块
- Fedora Core 5 内核模块编译
- 两个编译2.4与2.6内核模块的Makefile 模板
- 日记 [2008年03月23日]不编译内核给iptables增加模块
- Linux 2.6内核的编译步骤及模块的动态加载
- 在Debian 4.0rc3上编译内核2.6.24时加入Layer7模块笔记--第二版