Hello World驱动程序

Hello World驱动程序


















1.头文件(必选)

2.模块参数(可选)

3.模块功能函数(可选)

4.其他(可选)

5.模块加载函数(必选)

6.模块卸载函数(必选)

7.模块许可声明(必选)

1.      头文件(必选)

#include <linux/module.h>

#include <linux/init.h>

2.      模块参数(可选)

3.      模块加载函数(必选)

模块加载时,需要执行的函数

4.      模块卸载函数(必选)

模块卸载时,需要执行的函数

5.      模块许可声明(必选)

MODULE_LICENSE(“GPL”);                                           
/*任一版本的GNU公共许可权*/

MODULE_LICENSE(“GPL v2”);

MODULE_LICENSE(“GPL and additional rights”);

MODULE_LICENSE(“Dual
BSD/GPL”);                        
/*BSD/GPL双重许可权*/

MODULE_LICENSE(“Dual MPL/GPL”);

MODULE_LICENSE(“Proprietary”);                             
/*专有许可权*/

Hello.c 代码:

#include<linux/init.h>

#include<linux/module.h>

staticint hello_init(void)

{

printk(KERN_ALERT "Hello, World\n");

return 0;

}

staticvoid hello_exit(void)

{

printk(KERN_ALERT "Goodbye,World\n");

}

module_init(hello_init);

module_exit(hello_exit);

MODULE_LICENSE("DualBSD/GPL");

MODULE_AUTHOR("Chaos.tong");

Makefile文件:

KERNELDIR=
/opt/FriendlyARM/mini2440/linux-2.6.32.2

PWD
:=$(shell pwd)

INSTALLDIR=/lib/modules/2.6.32.2-FriendlyARM

CROSS_COMPILE= arm-linux-

CC=$(CROSS_COMPILE)gcc

obj-m
:=hello.o

.PHONY:modulesmodules_install clean

modules:

$(MAKE) -C $(KERNELDIR) M=$(PWD)
modules

modules_install:

cp hello.ko $(INSTALLDIR)

clean:

rm -rf *.o *~ core .depend .*.cmd *.ko*.mod.c
.tmp_versions

执行make 命令,

生成的hello.ko 放进U盘,传到板子上。

时间: 2024-08-02 06:21:06

Hello World驱动程序的相关文章

第一个Linux驱动程序统计单词个数

Linux驱动的工作和访问方式是Linux的亮点之一,Linux系统将每一个驱动都映射成一个文件.这些文件称为设备文件或驱动文件,都保存在/dev目录中,这种设计理念使得与Linux驱动进行交互就像与普通文件进行交互一样容易,当然也比访问LinuxAPI更容易. 编写Linux驱动的程序的步骤: 第1步:建立 Linux 驱动骨架(装载和卸载 Linux 驱动) 第2步:注册和注销设备文件 第3步:指定与驱动相关的信息 第4步:指定回调函数 第5步:编写业务逻辑 第6步:编写 Makefile

小白的linux字符驱动程序

关于如何编译一个测试型的字符驱动程序,网上一搜还是很多的在此给出一个不错的教程http://blog.chinaunix.net/uid-11829250-id-337300.html 我主要是在搜索ioctl的时候才有自己编写一个字符驱动的想法,因为刚工作的时候就看到有同事在用ioctl,当时在网上搜了下ioctl也没怎么明白.现在才发现原来ioctl就是对应的设备驱动程序里的ioctl函数.好了,废话就不多说了.写这篇文档的主要意义在于给后来编写驱动程序的新手们提示几个可能会遇到的问题,希望

20150218【改进】IMX257实现GPIO-IRQ中断按键获取键值驱动程序

[改进]IMX257实现GPIO-IRQ中断按键获取键值驱动程序 2015-02-18 李海沿 一.使用struct pin_desc 管理按键的值 1.定义结构体 2.将前面我们申请中断时写的(void *)1修改为 &pins_desc[n] 在ioctl中,设置中断中修改 在key_release中释放中修改 3.在中断程序中利用我们定义的struc pins_desc判断并得到按键的值 4.得到按键键值后,唤醒程序,在read函数中返回键值 附上驱动源程序: 1 /***********

20150218【改进信号量】IMX257实现GPIO-IRQ中断按键获取键值驱动程序

[改进信号量]IMX257实现GPIO-IRQ中断按键获取键值驱动程序 2015-02-18 李海沿 前面我们使用POLL查询方式来实现GPIO-IRQ按键中断程序 这里我们来使用信号量,让我们的驱动同时只能有一个应用程序打开. 一.首先在前面代码的基础上来一个简单的信号 1.定义一个全局的整形变量 2.在打开函数中,每次进入打开函数canopen都自减1, 3.当我们不使用时,在realease 中canopen自加1 4.这样就实现了一个简单的信号量,我们编译,测试 当我们使用两个应用程序来

20150218【改进Poll定时查询】IMX257实现GPIO-IRQ中断按键获取键值驱动程序

[改进Poll定时查询]IMX257实现GPIO-IRQ中断按键获取键值驱动程序 2015-02-18 李海沿 按键驱动程序中,如果不使用read函数中使程序休眠的,而是还是使用查询方式的话,可以使用Poll函数,来控制一定时间内,如果有按键发生,则立即返回键值. 同时,poll也可以同时监控多个(比如说按键,鼠标,等)一旦发生事件则立即返回. 我们在linux查看帮助: 从帮助中的说明得知, poll, ppoll - wait for some event on a file descrip

Advanced Installer 中测试数据库连接提示“未发现数据源名称并且未指定默认驱动程序”的解决办法

原文:Advanced Installer 中测试数据库连接提示"未发现数据源名称并且未指定默认驱动程序"的解决办法 最近需要制作一个安装包,安装包的要求如下: 1.用户手工填写MySql的地址.用户名和密码 2.填写完成后提供测试数据库连接是否正常的按钮功能 3....... 项目要求打包的Mysql版本为5.5.27 x64版本,通过研究Advanced Installer 发现,此打包工具提供了数据库连接字符串,并且是通过ODBC的方式来连接的,既然是安装的64位的数据库,那么连

字符设备驱动程序之同步互斥阻塞

目的:在同一时刻,只有一个应用程序打开/dev/buttons 驱动程序: #include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/init.h>#include <linux/delay.h>#include <linux/irq.h>#include <asm/uaccess.h>#include &l

深入Linux内核架构 - 内核之中数据结构之间的关系图 &amp; 设备驱动程序(转)

内核之中数据结构之间的关系图 设备驱动程序

【重要】Nginx模块之————Lua-Resty-Redis的参数介绍 (Lua-Nginx-Module 模块的Redis客户端驱动程序)

一.描述 这个Lua库是ngx_lua nginx模块的Redis客户端驱动程序:https://github.com/openresty/lua-nginx-module/#readme,这个Lua库利用ngx_lua的cosocket API,确保100%的非阻塞行为.请注意,至少需要ngx_lua 0.5.14或OpenResty 1.2.1.14. 二.方法介绍 除了所有的小写字母外,所有的Redis命令都有自己的方法.您可以在这里找到完整的Redis命令列表:http://redis.

用于与数据库连接的JDBC和驱动程序的理解

理解: java应用程序与数据库建立连接时,先通过jdbc(jdbc是属于jdk带有的)与数据库厂商提供的驱动程序通信,而驱动程序再与数据库通信. 数据库厂商提供的驱动程序: 数据库的种类有多种,比如mysql.oracle等,不同的数据库有不同的驱动程序.所以在进行其他操作前,首先要下载导入对应的驱动程序jar包. 连接测试步骤: 先声明所用到的数据库的url.用户名和密码(数据库的) private static String url="jdbc:mysql://localhost:3306