<ARM嵌入式开发学习>我的第一个驱动程序-hello world
2015-04-23 19:43
405 查看
第一次接触ARM开发板,整整用了一天才把板子原来的wince系统烧写为Linux,其中就卡在制作SD卡启动的时候,使用的是8G的卡,结果官方提供的制作软件不支持~~~~
使用的开发板子:TQ2416
芯片:三星的S3C2416,是S3C2440的升级版吧。。。。。
然后又是一天在ubuntu下搭建开发环境,根据官方源码编译u-boot,kernel………………
终于,开始写自己的第一个驱动程序了,,,和hello world!
首先得明白自己的目的是什么即实现什么功能。
显然,我的第一个驱动不可能很复杂,应该就和我们学习语言时的历程一样,第一个驱动就是简单的输几个字符
2. 在哪里写。
在内核文件夹drivers/char文件夹下面,因为这里面应该都是字符类的驱动程序,我们这修改配置文件的时候可以有所借鉴。
3. 怎么写。
第一次书写驱动,按部就班的照官方文档提供的例子。
关于module_init()/module_exit,即模块的动态加载与释放,可以学习这篇文章http://blog.csdn.net/dysh1985/article/details/7597105
注意:
这里的init前面是两个__!!
4. 在内核源码中添加对该驱动的支持
修改本目录下面的Kconfig和Makefile文件
Kconfig:
depends on是依赖的平台
help就是在配置内核是的提示
Makefile:
这样在内核根目录下面make menuconfig配置内核菜单,依次顺序是DeviceDrivers->Character devices->gqb_hello,输入M选择为模块即可
在内核根目录下执行make modules便可以编译出来了.
5.测试模块
编译出来的模块默认的在driver/char里面,拷贝到开发板中,执行insmod gqb_hello.ko和rmmod gqb_hello.ko即可加载和卸载了.
效果:
使用的开发板子:TQ2416
芯片:三星的S3C2416,是S3C2440的升级版吧。。。。。
然后又是一天在ubuntu下搭建开发环境,根据官方源码编译u-boot,kernel………………
终于,开始写自己的第一个驱动程序了,,,和hello world!
首先得明白自己的目的是什么即实现什么功能。
显然,我的第一个驱动不可能很复杂,应该就和我们学习语言时的历程一样,第一个驱动就是简单的输几个字符
2. 在哪里写。
在内核文件夹drivers/char文件夹下面,因为这里面应该都是字符类的驱动程序,我们这修改配置文件的时候可以有所借鉴。
3. 怎么写。
第一次书写驱动,按部就班的照官方文档提供的例子。
/************************************************************************* <span style="white-space:pre"> </span>> File Name: gqb_hello.c <span style="white-space:pre"> </span>> Author: GQB1226 <span style="white-space:pre"> </span>> Mail: gqb1226@sina.com <span style="white-space:pre"> </span>> Created Time: 2015年04月23日 星期四 17时46分17秒 ************************************************************************/ #include<linux/module.h> #include<linux/kernel.h> #include<linux/init.h> MODULE_LICENSE("GPL");// 加上license static int __init gqb_hello_init(void) { printk("<1>\n hello world!\n");//关于printk函数 printk("<1>\n this is my first driver program\n"); return 0; } static void __exit gqb_hello_exit(void) { printk("<1>\n Exit!\n"); printk("<1>\n GoodBye !\n\n"); } module_init(gqb_hello_init);//动态加载/卸载模块时,需要使用module_init()/module_exit来进行 module_exit(gqb_hello_exit);关于printk函数,和c语言里面的printf的作用几乎是一样的,只不过后者运行在用户态,前者运行在核心态.printk显示会根据日志级别来打印输出消息.具体的可以查询这函数.
关于module_init()/module_exit,即模块的动态加载与释放,可以学习这篇文章http://blog.csdn.net/dysh1985/article/details/7597105
注意:
static int __init gqb_hello_init(void)
这里的init前面是两个__!!
4. 在内核源码中添加对该驱动的支持
修改本目录下面的Kconfig和Makefile文件
Kconfig:
config GQB_HELLO tristate "TQ2416 gqb_hello" depends on (CPU_S3C2416) help gqb's first driver program!这里的tristate 是要指明在内核配置菜单中显示的名字
depends on是依赖的平台
help就是在配置内核是的提示
Makefile:
obj-$(CONFIG_GQB_HELLO) +=gqb_hello.o注意这里的CONFIG_GQB_HELLO一定要和Kconfig里面的名字一致,否则编译不出来.
这样在内核根目录下面make menuconfig配置内核菜单,依次顺序是DeviceDrivers->Character devices->gqb_hello,输入M选择为模块即可
在内核根目录下执行make modules便可以编译出来了.
5.测试模块
编译出来的模块默认的在driver/char里面,拷贝到开发板中,执行insmod gqb_hello.ko和rmmod gqb_hello.ko即可加载和卸载了.
效果:
相关文章推荐
- <转>浅析如何学习基于ARM平台的嵌入式系统
- Linux驱动开发学习 第一个驱动程序 hello world
- [学习笔记]java基础Java8SE开发环境搭建、第一个Java Hello World、Java程序的编译与执行
- [嵌入式学习资料]ARM嵌入式开发学习详解4412开发板使用手册-600余页资料
- 【嵌入式Linux学习七步曲之第二篇 ARM+Linux开发环境】详解gdb+gdbserver运行问题./gdbserver: error in loading shared libraries
- 郁金香驱动编程学习>第一课:第一个驱动程序
- [学习笔记]java基础Java8SE开发环境搭建、第一个Java Hello World、Java程序的编译与执行
- <2012 11 6 > linux设备驱动程序开发初探(4) linux的中断体系_按键中断驱动程序编写
- <转> ios开发学习笔记(这里一定有你想要的东西,全部免费)
- ARM芯片学习内容规划及ARM开发环境的搭建 分类: 嵌入式开发学习 2014-06-06 14:17 278人阅读 评论(0) 收藏
- 【嵌入式Linux学习七步曲之第二篇 ARM+Linux开发环境】详解为什么开发板的TFTP、NFS等网络功能神奇消失
- <2012 11 3 > linux设备驱动程序开发初探(1) 目次 概念 框架 最小驱动程序
- 【嵌入式Linux学习七步曲之第二篇 ARM+Linux开发环境】在AT91RM9200上通过nfs调试linux程序
- 驱动程序开发学习(三)hello world
- 制作S3C6410 的交叉编译链(arm-linux-gcc 4.6.0) 分类: 嵌入式开发学习 2014-03-25 20:26 2398人阅读 评论(0) 收藏
- <<敏捷软件开发:原则、模式与实践>>时,素数产生程序,第一个java
- [嵌入式学习资料]ARM开发学习详解iTOP-4412开发板使用手册
- android <初级篇> 第一个工程Hello World ! ——菜鸟的学习之路
- <2012 11 4 > linux设备驱动程序开发初探(3) 练习:从零写一个查询式按键驱动程序
- 8.18日亚嵌嵌入式直播课堂一(视频):如何学习ARM嵌入式开发?