转载_ARM-Linux内核驱动加载过程思路
来源:互联网 发布:无网络传奇单机破解版 编辑:程序博客网 时间:2024/05/02 05:00
Ø 取得驱动C文件并建立相应文件夹实现内核添加(以编译测试驱动程序为例)
1) 在相应的文件夹下面建立驱动文件夹
将C程序放入该驱动文件夹下
2) 创建或下载驱动C文件的头文件
3) 编辑该驱动集合(该驱动模块)下面的Makefile 添加编译选项
#===============driver_test============ obj-$(CONFIG_DRIVER_TEST_SYD168) += driver_test/
#===================================
4) 编辑该驱动集合(该驱动模块)下面的Kconfig 添加编译选项菜单
#=========Driver_test_syd168===========
source "drivers/char/driver_test/Kconfig"
#======================================
5) 编辑该驱动文件夹下面的Makefile 添加编译此驱动程序
obj-$(CONFIG_DRIVER_TEST_SYD168) += driver_test.o
6) 编辑该驱动文件夹下面的Kconfig 添加编译选项菜单
#
#tDriver device configuration
#
menu "Driver test by syd168"
config DRIVER_TEST_SYD168
bool "Driver test by syd168"
# depends on ACH_MINI2440
default y
---help---
Driver test by syd168 2011.5.2
Endmenu
7) 修改内核根目录(Linux-2.6.37)下的Makefile
修改
ARCH ?= arm 指定平台
CROSS_COMPILE ?= arm-linux- 指定编译器
8) 在驱动文件夹下面编译
#make
编译结果
built-in.o Kconfig modules.order
driver_test.c Makefile driver_test.ko
driver_test.o modules.builtin
9) 将驱动文件driver_test.ko拷贝到开发板/lib/modules
命令:#insmod driver_test.ko
安装驱动成功显示:Driver Init:Hello world
命令:#lsmod
查看当前安装的驱动:driver_test 704 0 - Live 0xbf000000
0xbf000000表示模块地址
卸载驱动要在/lib下面建立linux-2.6.37文件夹拷贝driver_test.ko到此文件夹下
命令:rmmod driver_test
卸载成功显示:Driver exit:Goodbye,world
Ø 取得驱动C文件不建立相应文件夹直接放到相应模块文件夹下
1) 将C文件拷贝到模块文件夹下面
2) 下载或编写相应模块头文件相应模块文件夹下(与C程序一起)
3) 编辑模块文件夹下Makefile添加相应的编译选项
obj-$(CONFIG_MINI2440_ADC) += mini2440_adc.o
4) 编辑模块文件夹下Kconfig 添加相应的选项菜单
config MINI2440_ADC
bool "ADC driver for Mini2440 development boards"
depends on MACH_MINI2440
default y if MACH_MINI2440
help
this is ADC driver for FriendlyARM Mini2440 development boards
Notes: the touch-screen-driver required this option
5) 修改内核根目录(Linux-2.6.37)下的Makefile
ARCH ?= arm 指定平台
CROSS_COMPILE ?= arm-linux- 指定编译器
6) 重新编译内核
7) 制作内核映像文件
8) 下载到开发板
9) 编辑测试程序(对测试文件自己编写或下载一个编译arm-linux-gcc)测试
编译基于ARM LINUX的动态驱动模块的Makefile
PWD := $(shell pwd)
CROSS_COMPILE = /usr/local/arm/4.3.2/bin/arm-linux-
CC = $(CROSS_COMPILE)gcc
obj-m := key.o
modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions
.PHONY: modules clean
- 转载_ARM-Linux内核驱动加载过程思路
- ARM-Linux内核驱动加载过程思路
- Linux内核驱动加载过程
- 转载_ARM-Linux驱动--Watch Dog Timer(看门狗)驱动分析
- linux 内核驱动加载
- Linux内核加载过程
- Linux 内核加载过程
- Linux内核加载过程
- linux内核SPI总线驱动分析思路
- Linux内核驱动加载顺序
- linux内核驱动---hello_world驱动加载
- 转载_ARM的分散加载文件(scatter)介绍
- Linux内核驱动模块(转载学习)
- linux内核驱动模块加载方式
- Linux内核驱动加载顺序 3
- linux内核驱动模块加载方式
- Linux内核驱动加载顺序 system.map
- linux内核驱动模块加载方式
- Unity3D的wamp5服务器 加载材质
- Entity Framework返回IEnumerable还是IQueryable?
- 关于使用ImageLoader出现的Bitmap too large to be uploaded into a texture
- 临时表
- 十道海量数据处理面试题与十个方法大总结
- 转载_ARM-Linux内核驱动加载过程思路
- c++学习笔记(1)——环境搭建、经典教程推荐及 Visual Studio 2005/2008中如何编译和运行C++程序
- mark
- Google Map Android api V2 中使用MapView遇到CameraUpdateFactory is not initialized!的解决办法
- 设置JAVA_OPTS
- LeetCode-Pascal's Triangle
- 题目1444:More is better
- discuz通过调用函数实现同步登录与退出
- [leetcode] Merge Sorted Array