编译驱动到内核的两种方式
来源:互联网 发布:unity3d背包系统 下载 编辑:程序博客网 时间:2024/04/29 03:37
搜索公众号:itxxgh (IT学习干货),全公益,免费,定期,提供,《IT学习教程》。不会骚扰大家,只需轻点关注,也会传播《中华传统文化》传播正能量,扫码关注
编译驱动模块
有两种方法可以编译自己写的驱动程序。第一种方法:直接加入内核
1. 将驱动程序放入内核相应的驱动文件夹,例如名字为my_led.c
2. 修改此驱动目录下的Kconfig文件,加入对该驱动文件的配置选项:
config MY_LED
bool "S3C2410 LED Driver"
depens on ARCH_S3C2410
help
LED driver for the samsung s3c2410
说明:my_LED是配置选项标题
bool表示该选项要么是y要么是n,不可编译成模块。如需要编译成模块则改为tristate(三态)
3. 修改此驱动目录下的Makefile文件,加入对驱动源码的编译:
obj-$(CONFIG_MY_LED) += my_led.o
第二种方法:单独编译驱动模块(1)
1. 下载内核源代码,选择和你的驱动相同的平台的配置文件进行编译,
假设路径为/root/linux-2.6.29。或者利用/usr/src下面的源码,这样就只能编译主机平台上的驱动。
2. 将驱动文件放在一目录下,例如/root/dirver/my_led.c
3. 在/root/driver下编写Makefile文件,内容为:
obj-m := my_led.o
如果这个模块包含多个.c文件,则如下编写Makefile :
obj-m := module_name.o
module-objs := file1.o file2.o ...
4. 在本目录下执行:
make -C /root/linux-2.6.29 M=$(pwd) modules
第三种方法:单独编译驱动模块(2)
直接编写Makefile文件:
obj-m :=led.o
CURRENT_PATH := $(shell pwd)
ARM_LINUX_KERNEL :=/root/linux-2.6.29
all:
$(MAKE) -C $(ARM_LINUX_KERNEL) M=$(CURRENT_PATH) modules
clean:
rm -rf .*.cmd *.o *.mod.c *.ko .tmp_versions Module.symvers .Makefile.swp modules.order
运行make即可
=========无敌分割线=======================================
驱动加载分为两种模式:静态加载、动态加载。
(1)静态加载需要你:正常步骤应该是先改本文件下的kconfig文件 增加config_XXX
在menuconfig中勾选这条目录
在makefile中增加obj-$(CONFIG_XXX) += c文件名.o
(2)动态加载需要你编译成动态模块.ko文件,然后再用insmod加载。
0 0
- 编译驱动到内核的两种方式
- 编译驱动到内核的两种方式
- linux驱动编译的两种方式
- PandaBoard 驱动编译 两种方式的makefile
- Linux下编译安装驱动的两种方式
- 编译替换内核(两种方式)
- Linux内核两种编译方式
- 在内核里写i2c设备驱动的两种方式
- Linux内核里写i2c client 驱动的两种方式
- 在内核里写i2c client 驱动的两种方式
- 内核里写i2c client 驱动的两种方式 【转】--未读
- 在内核里写i2c client 驱动的两种方式
- 在内核里写i2c client 驱动的两种方式
- 在内核里写i2c client 驱动的两种方式
- 怎样将驱动静态的编译到内核中。
- 驱动的两种编译方法
- 驱动的两种编译方法
- access数据库的两种驱动方式
- 空指针,空对象,野指针
- android中onActivityResult不执行
- 虚幻4随笔5 使用中的一些发现
- Redis数据结构与对象
- FPGA 中的latch 锁存器
- 编译驱动到内核的两种方式
- WCF通信模式
- java中抛出RuntimeException异常,为什么可以不用撰写代码去捕获它?
- 线程池ExecutorService
- HDU1494 跑跑卡丁车 --简单DP
- Cordova webapp archive时候 报错 Cordova/CDVViewController.h file not found
- OC_ARC学习笔记
- jmockit简单介绍
- 面向对象 第一课