hello.c文件如下

驱动程序:

#include <Linux/***.h> 是在linux-2.6.29/include/linux下面寻找源文件。

#include <asm/***.h> 是在linux-2.6.29/arch/arm/include/asm下面寻找源文件。

#include <mach/***.h> 是在linux-2.6.29/arch/arm/mach-s3c2410/include/mach下面寻找源文件。

#include <linux/module.h>  //最基本的文件,支持动态添加和卸载模块。Hello World驱动要这一个文件就可以了

#include <linux/fs.h>  //包含了文件操作相关struct的定义,例如大名鼎鼎的struct file_operations

#include <linux/errno.h>  //包含了对返回值的宏定义,这样用户程序可以用perror输出错误信息。

#include <linux/types.h>  //对一些特殊类型的定义,例如dev_t, off_t, pid_t.其实这些类型大部分都是unsigned int型通过一连串的typedef变过来的,只是为了方便阅读。

#include <linux/cdev.h>  //对字符设备结构cdev以及一系列的操作函数的定义。

#include <linux/wait.h>  //等代队列相关头文件

应用程序:

#include <fcntl.h> //包含了open()函数的flags,mode参数的宏定义。

Linux驱动程序常用头文件列举

l         #include <linux/module.h>

最基本的文件,支持动态添加和卸载模块。Hello World驱动仅需要这一个头文件即可。

l         #include <linux/fs.h>

包含了struct inode 的定义、MINOR、MAJOR的定义、众所周知的文件操作结构体:struct file_operations,等文件操作相关的定义。

l         #include <linux/errno.h>

包含了对返回值的宏定义,这样用户程序可以用perror输出错误信息。

l         #include <linux/types.h>

对一些特殊类型的定义,例如dev_t、off_t、 pid_t。其实这些类型大部分都是unsigned int型通过一连串的typedef变过来的,这样做只是为了方便阅读。

l         #include <linux/cdev.h>

对字符设备结构cdev以及一系列的操作函数的定义。包含了cdev 结构及相关函数的定义。

l         #include <linux/wait.h>

等代队列相关头文件。内核等待队列,它包含了自旋锁的头文件。

l         #include <linux/slab.h>

包含了kcalloc、kzalloc内存分配函数的定义。

l         #include <linux/uaccess.h>

包含了copy_to_user、copy_from_user等内核访问用户进程内存地址的函数定义。

l         #include <linux/device.h>

包含了device、class 等结构的定义

l         #include <linux/io.h>

包含了ioremap、iowrite等内核访问IO内存等函数的定义。

l         #include <linux/miscdevice.h>

包含了miscdevice结构的定义及相关的操作函数。

l         #include <linux/interrupt.h>

使用中断必须的头文件

l         #include <mach/irqs.h>

使用中断必须的头文件

l         #include <asm/bitops.h>

包含set_bit等位操作函数,实现Input子系统时可用。

l         #include <linux/semaphore.h>

使用信号量必须的头文件

l         #include <linux/spinlock.h>

使用自旋锁必须的头文件

l         #include <linux/sched.h>

内核等待队列中要使用的TASK_NORMAL、TASK_INTERRUPTIBLE包含在这个头文件

l         #include <linux/kfifo.h>

fifo环形队列

l         #include <linux/timer.h>

内核定时器

l         #include <linux/input.h>

中断处理

MODULE_LICENSE("GPL");

MODULE_AUTHOR("David Xie");

MODULE_DESCRIPTION("Hello World Module");

MODULE_ALIAS("a simplest module");

static int __init hello_init()

{

printk(KERN_EMERG"Hello World!\n");

return 0;

}

static void __exit hello_exit()

{

printk("<6>hello exit\n");

}

module_init(hello_init);

module_exit(hello_exit);


Makefile文件如下:
ifneq ($(KERNELRELEASE),)

obj-m := hello.o

else
KDIR :=/home/Linux_Sharing/Session1/embedded_setup/linux-2.6.24/
all:
make -C $(KDIR) M=$(PWD) modules ARCH=armCROSS_COMPILE=arm-linux-
clean:
rm -f *.ko *.o *.mod.o *.mod.c *.symvers

endif
#include
#include

MODULE_LICENSE("GPL");
MODULE_AUTHOR("David Xie");
MODULE_DESCRIPTION("Hello World Module");
MODULE_ALIAS("a simplest module");

static int __init hello_init()
{
printk(KERN_EMERG"Hello World!\n");
return 0;
}

static void __exit hello_exit()
{
printk("<6>hello exit\n");
}

module_init(hello_init);

[ARM-Linux开发] 嵌入式 linux如何生成ko文件的更多相关文章

  1. 【miscellaneous】【ARM-Linux开发】ARM平台基于嵌入式Linux Gstreamer 使用

    1). 简介 随着ARM平台性能的日益强大和嵌入式设备的发展,对于多媒体处理如音视频播放,摄像头,流媒体处理等需求也日益增多,本文就通过几个基于嵌入式Linux下多媒体应用的示例来简单展示下使用Gst ...

  2. 【Linux开发】Linux及Arm-Linux程序开发笔记(零基础入门篇)

    Linux及Arm-Linux程序开发笔记(零基础入门篇) 作者:一点一滴的Beer http://beer.cnblogs.com/ 本文地址:http://www.cnblogs.com/beer ...

  3. [转][linux][centos]嵌入式 Linux下编译并使用curl静态库

    #x86 ./configure --disable-shared --enable-static --disable-ftp --disable-ipv6 --disable-rtsp --disa ...

  4. 【Linux开发】linux设备驱动归纳总结(二):模块的相关基础概念

    linux设备驱动归纳总结(二):模块的相关基础概念 系统平台:Ubuntu 10.04 开发平台:S3C2440开发板 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...

  5. 【Linux开发】linux设备驱动归纳总结(一):内核的相关基础概念

    linux设备驱动归纳总结(一):内核的相关基础概念 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...

  6. 【DSP开发】【Linux开发】Linux下PCI设备驱动程序开发

    PCI是一种广泛采用的总线标准,它提供了许多优于其它总线标准(如EISA)的新特性,目前已经成为计算机系统中应用最为广泛,并且最为通用的总线标准.Linux的内核能较好地支持PCI总线,本文以Inte ...

  7. linux(centos8):用fallocate快速生成大文件

    一,fallocate的用途? 1,用途 我们有时需要用大文件来测试下载速度, 有时需要用大文件来覆盖磁盘空间, 如果在网上搜索,很多文章讲的是使用dd等工具, 事实上linux系统已经内置了生成大文 ...

  8. 用VC6开发嵌入式LINUX程序

    黄山松 (Tom Huang) 发表于博客园http://www.cnblogs.com/tomview/ 首先说明一下,VC6自然不能直接开发LINUX程序,主要使用的是它的编辑环境而已,但是作为一 ...

  9. 基于live555开发嵌入式linux系统的rtsp直播服务

    最近要搞一个直播服务,车机本身是个前后双路的Dvr,前路1080P 25fps,后路720P 50fps,现在要连接手机app预览实时画面,且支持前后摄像头画面切换. 如果要做直播,这个分辨率和帧率是 ...

随机推荐

  1. 命令行的方式启动和关闭Mysql

    命令行的方式启动和关闭Mysql mysql -h 主机名 -P 端口号 -u 用户名 -p 密码 例如:mysql -h localhost -P 3306 -u root -p11111(p和密码 ...

  2. 查看服务器被访问最大的ip

    网站有时会很卡,可以先看看哪些ip访问最多,一行命令就可以列出来,如下所示 netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c ...

  3. (14)树莓派 - 修改pi账号密码,开启root账号

    https://blog.csdn.net/yoie01/article/details/45115067 1.修改PI账号的密码 password pi 2.开启root账号树莓派使用的linux是 ...

  4. Mobius

    Mobius 形式一 \[ f\left(n\right) = \sum_{d|n}g\left(d\right) \\ g\left(n\right) = \sum_{d|n}\mu\left(d\ ...

  5. 什么是JSON Web Token

    JSON Web Token(JWT)是一个基于 RFC 7519 的开放数据标准,它定义了一种宽松且紧凑的数据组合方式,使用 JSON  对象在各应用之间传输加密信息.该 JSON 对象可以通过数字 ...

  6. url的组成部分

    /news/index.asp?boardID=5&ID=24618&page=1#name 协议:http: //为分隔符 域名:www.aspxfans.com :为域名和端口之间 ...

  7. 洛谷 P2872 【[USACO07DEC]道路建设Building Roads】

    P2872 传送门 首先 题目概括:题目让着求使所有牧场都联通.需要修建多长的路. 显然这是一道最小生成树板子题(推荐初学者做). 那我就说一下kruskal吧. Kruskal算法是一种用来查找最小 ...

  8. 用户路径分析(User Path Analysis)

    什么是用户路径? 用户路径即抽象用户在网站或APP中的访问路径.其可用桑基图展现,称为用户路径图. 什么是用户路径分析? 用户路径分析追踪用户从某个开始事件直到结束事件的行为路径,即对用户流向进行监测 ...

  9. SpringBoot之文件上传体积过大问题(解决方案)

    错误信息如下(关键): org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: the re ...

  10. 分析WordPress数据表之用户表(功能篇)

    数据表分析 wp_users wp_usermeta 用户系统就是靠着这两张表来实现的. 具体事例分析 添加用户 添加成功后,我们会分别在wp_users及wp_usermeta表中分别看到test0 ...