嵌入式 linux如何生成ko文件

原创 2013年12月02日 14:53:32

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);

编写makefile生成.ko

fb0623 2010-03-30 23:32 我写了一个LED驱动。我insmod驱动,如何编写makefile生成.ko文件?我用的是micro2440板 linux内核是2.6.29。 ...
  • mengfanteng
  • mengfanteng
  • 2015年06月11日 20:48
  • 1479

.c文件如何编译为ko的MAKEFILE文件编写

首先需要知道: obj-m = *.o obj-y = *.o 上面两者的区别在于,前者才会生成ko文件,后者只是代码编译进内核,并不生成ko文件。 生成KO文件,分两种情况:单个.c文件...
  • yangbingzhou
  • yangbingzhou
  • 2016年04月18日 09:05
  • 4984

linux 系统 ko模块编译

今天整理以前笔记,发现曾经里面有一个Makefile文件。   仔细一看是以前实习做linux内核程序设计时候写的模块makefile。刚好我电脑也有linux系统,就拿来回顾一下。 写个my....
  • elfylin
  • elfylin
  • 2010年09月26日 21:10
  • 18375

Linux下hello.ko内核模块制作的全过程

Linux下hello.ko内核模块制作的全过程 1. linux系统用的是Redflag 6.0 SP1 下载地址:ftp://ftp.redflag-linux.com/pub/redflag...
  • jiankangshiye
  • jiankangshiye
  • 2011年08月06日 14:22
  • 20237

Linux 设备驱动helloworld.ko的制作过程

一. 源程序
  • changzhi1990
  • changzhi1990
  • 2014年04月04日 14:13
  • 599

linux之ko文件生成

  • 2014年03月27日 22:23
  • 5KB
  • 下载

Linux驱动中的.o文件与.ko文件的区别

转自:http://wxpjiujiang.blog.163.com/blog/static/2039940302012272272901/ Linux驱动中的.o文件与.ko文件的区别   ...
  • lijiatong1005
  • lijiatong1005
  • 2013年08月11日 17:47
  • 2812

linux下编译运行驱动

linux下编译运行驱动 嵌入式linux下设备驱动的运行和linux x86 pc下运行设备驱动是类似的,由于手头没有嵌入式linux设备,先在vmware上的linux上学习驱动开发。 按照如...
  • zeroboundary
  • zeroboundary
  • 2013年07月10日 21:05
  • 13219

把多个源码编译成一个ko文件的方法

陆陆续续也写了几个Linux内核模块了,但每次都是把代码写在一个源文件中,上次尝试了写在两个.c文件中,结果没有编译通过。 无奈之下,将其中一个.c文件重命名成.h文件,再include当另一个当中。...
  • chuhongcai
  • chuhongcai
  • 2016年08月23日 10:30
  • 1987

Linux下加载.ko驱动模块的两种方法:insmod与modprobe

Linux下加载.ko驱动模块的两种方法:insmod与modprobe
  • lihui126
  • lihui126
  • 2015年05月14日 20:56
  • 11487
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:嵌入式 linux如何生成ko文件
举报原因:
原因补充:

(最多只允许输入30个字)