Ubuntu12.04 *** 作系统和测试驱动程序(beep_arv.c)
方法/步骤
在介绍2种方法前,必须知道的知识点:
1.关联文件Makefile:
Makefile:分布在Linux内核源代码中的Makefile用于定义Linux内核的编译规则;
2.管理文件Kconfig:
给用户提供配置选择的功能;
配置工具:
1)包括配置命令解析器;
2)配置用户界面;menuconfig || xconfig;
3)通过脚本语言编写的;
3.
---tristate 代表三种状态:1.[ ]不选择,2.[*]选择直接编译进内核,加载驱动到内核里,3.[m]动态加载驱动;
---bool 代表两种状态,1.[ ]不选择,2.[*]选择;
---"Mini2440 module sample"这个是在make menuconfig时刷出的提示字符;
---depends on MACH_MINI2440 这个配置选项出现在make menuconfig菜单栏下,在内核配置中必须选中、MACH_MINI2440;
---default m if MACH_MINI2440 这个如果选中了MACH_MINI2440,默认是手
动加载这个驱动;
help:提示帮助信息;
在了解了基本的知识点,便开始进行第一种添加驱动的方法,本次交流是以beep_arv.c蜂鸣驱动程序为基础的
方法一:
1)进入内核的驱动目录;
#cp beep_arv.c /XXX/.../linux-XXXl/drivers/char
2)进入Kconfig添加驱动信息;
#cd /XXX/linux-XXX/.../drivers/char
#vim Kconfig
添加基本信息:
config BEEP_MINI2440
tristate "---HAH--- BEEP"
default
help
this is test makefile!
3)进入Makefile添加驱动编译信息;
#vim Makefile
添加基本信息:
obj-$(CONFIG-BEEP_MINI2440) +=beep_drv.o
方法一结果:
在--Character devices下就能看到配置信息了;
方法二:
1)进入驱动目录,创建BEED目录;
#cd /XXX/.../linux-XXX/drivers/char
#mkdir beep
2)将beep_arv.c驱动程序复制到新建目录下;
#cp beep_arv.c /XXX/.../linux-XXXl/drivers/char/beep
3)创建Makefile和Kconfig文件
#cd char/beep
#mkdir Makefile Kconfig
#chmod 755 Makefile
#chmod 755 Kconfig
4)进入Kconfig添加驱动信息;
#vim Kconfig
添加基本信息:
config BEEP_MINI2440
tristate "---HAH--- BEEP"
default
help
this is test makefile!
5)进入Makefile添加驱动编译信息;
#vim Makefile
添加基本信息:
obj-$(CONFIG_BEEP_MINI2440) +=beep_drv.o
6)并且要到上一级目录的Makefile和Kconfig添加驱动信息;
#cd ../
#vim Makefile
#vim Kconfig
1.进入你的内核源码文档,创建一个DoneLin_Driver文件夹来存放你的驱动,于是文件夹路径:drivers/DoneLin_Driver/:2.复制你的范例驱动到刚刚建立的DoneLin_Driver文件夹中,我的范例名字叫global_mem_two.c:
3.在DoneLin_Driver文件夹中建立两个新文本文件:Kconfig 和 Makefile
4.修改DoneLin_Driver文件夹下的Kconfig文件,输入以下内容:
menu "DoneLin-driver "
comment "global_mem_two-driver "
config GLOBAL_MEM_TWO tristate "global_mem_two DriTst" help this is global mem 2 test programming
endmenu
5.接着修改DoneLin_Driver的另一个文件Makefile,输入以下内容:
obj-$(CONFIG_GLOBAL_MEM_TWO) += global_mem_two.o
6.修改上一层目录(Driver目录)中的Kconfig文件,声明自己的源代码:在"menu "Device drivers""下面加入如下内容:
source "drivers/DoneLin_Driver/Kconfig"##...add my tst driver module
7.修改arch/arm/Kconfig
同样,跟在driver/Kconfig一样,在"menu device drivers"下面加入同样的语句:
source "drivers/DoneLin_Driver/Kconfig"
就是说:在arch/arm/Kconfig menu "Device Drivers" endmenu之间添加source "drivers/DoneLin_Driver/Kconfig"
在drivers/Kconfig menu "Device Drivers" endmenu之间添加source "drivers/hello/Kconfig"(不知为什么arch/arm/Kconfig中竟然含有Drivers里Kconfig内容的一个复本,实验证明只对drivers/Kconfig中修改内容无效。)
8.修改Drivers目录下的Makefile,在如图位置,加入:
obj-$(CONFIG_GLOBAL_MEM_TWO) += DoneLin_Driver/#ADD FOR TEST add_for_test add for test测试的驱动
8.都修改好,保存好之后,回到linux内核根目录,make menuconfig,奇迹出现了,我自己的linux驱动程序出现在内核的device drivers选项里面了:
选择global_mem_tow_DriTst为m,表示编译成模块,编译成ko文件
然后,保存退出,make, make zImage, make modules即可生成新的内核和新的modules,
完成了,
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)