【无标题】

一、什么是驱动?

最近了解了什么是驱动。linux内核主要通过设备树和驱动来控制硬件,例如音视频通过v4l2的驱动,usb通过字符驱动等等。简单点的说就是驱动是工作在内核空间,为上层提供必要的函数,上层应用通过调用这些函数就能间接的调用内核来驱动设备。

二、如何编译驱动

编译驱动之前先了解如何编译内核。
  1. 一般嵌入式都是工作在arm环境下,所以第一步就是安装交叉编译工具链。从官网下载解压后,在/usr/local下建立arm文件夹,将文件放入到该目录下,然后将路径加入到/etc/profile里。就可以了。
  2. 有了交叉工具链,就可以进行编译了。编译之前,先简单了解一下内核的组织架构、编译最后可以生成zimage和bzimage(压缩过后的链接文件),而这2者又依赖vmlinux。所以编译的目的就是生成该文件。该文件又是由一个个.o 文件链接而成。各个编译文件又是有各自的makefile编译而来的。各个编译文件又是由顶层的makefile进行控制的。所以只要配置最顶层的makefile即可。配置文件我们可以通过menuconfig 进行可视化配置,这点还是比较人性的。
  3. 有了上面的基础知识,就能够进行编译了。当然,编译不可能一帆风孙,通常需要各种依赖,根据报错即可足矣解决。一般会有以下几个错
    (1)缺少库文件,使用sudo安装
    (2)由于一般配置文件我们都是将当前系统的配置文件copy过来的,会有些初始化的东西被写入,根据提示清空就好了。
  4. 编译完成后,就可以进行驱动编译了。有个前提需要清楚,驱动是依赖与内核的,驱动的编译需要和未来安装的设备的内核版本保持一致。为什么呢?因为编译需要在内核大环境下进行。
KVERS = $(shell uname -r)

# Kernel modules
obj-m += hello_world.o

# Specify flags for the module compilation.
# EXTRA_CFLAGS=-g -O0

build: kernel_modules

kernel_modules:
	make -C /lib/modules/$(KVERS)/build M=$(CURDIR) modules

clean:
	make -C /lib/modules/$(KVERS)/build M=$(CURDIR) clean

5.编译完成会生成一个.ko文件,将他移植到目标版上,使用inmod就可以将驱动动态的安装到内核中,然后我们就可以在应用层调用驱动了。

总结

以上就是我对驱动一些自己的了解,以后边学边记录。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值