您的位置:首页 > 其它

<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.      怎么写。
 
                 第一次书写驱动,按部就班的照官方文档提供的例子。
       
/*************************************************************************
<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即可加载和卸载了.

 效果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐