Linux驱动学习之驱动开发准备工作

一、开启驱动开发之路

1、驱动开发的准备工作

(1)正常运行linux系统的开发板。要求开发板中的linux的zImage必须是自己编译的,不能是别人编译的。原因在于在安装模块的时候会进行安全性校验

(2)内核源码树,其实就是一个经过了配置编译之后的内核源码。我们需要内核源码编译自己的模块

(3)nfs挂载的rootfs,主机ubuntu中必须搭建一个nfs服务器。这对于驱动开发前期是不可或缺的,能够提高我们的开发效率。

2、驱动开发的步骤

(1)驱动源码编写、Makefile编写、编译

(2)insmod装载模块、测试、rmmod卸载模块

3、实践

(1)copy原来提供的x210kernel.tar.bz2,找一个干净的目录(/root/driver),解压之,并且配置编译。编译完成后得到了:1、内核源码树。2、编译ok的zImage

(2)fastboot将第1步中得到的zImage烧录到开发板中去启动(或者将zImage丢到tftp的共享目录,uboot启动时tftp下载启动),将来驱动编译好后,就可以在这个内核中去测

试。因为这个zImage和内核源码树是一伙的,所以驱动安装时版本校验不会出错。

我一般都会选择通过uboot启动之后使用tftp去下载主机服务器端共享目录中的zImage镜像文件,而不直接将zImage镜像文件烧入到Flash中,因为可能我们在开发驱动的过程

中会重新对内核进行配置编译,然后让开发板去启动这个新编译好的内核镜像文件,如果这样重复烧flash就比较麻烦了,效率也不高。

参考: 《朱友鹏嵌入式Linux开发\5.Linux驱动开发\5.2.字符设备驱动基础》

时间: 2024-10-05 17:14:45

Linux驱动学习之驱动开发准备工作的相关文章

驱动学习之驱动体验

1:什么是linux驱动 从本质上讲,驱动就是属于内核层面的程序代码,是直接和硬件打交道的.与裸机中直接操作寄存器去操作硬件的不同之处在于,裸机中操作的是物理内存,而我们在驱动中操作的是虚拟内存,驱动中还可以调用内核中提供的很多接口函数来简化我们操作硬件的过程. 2:linux设备驱动的分类 根据设备本身的读写操作特征的差别,linux驱动主要分为三类 (1)字符设备驱动 字符设备驱动的特点是软件在驱动设备是以字节为单位进行的,如LED.LCD.串口.蜂鸣器等 (2)块设备 块设备是相对于字符设

Linux嵌入式学习-ds18b20驱动

ds18b20的时序图如下: 复位时序: 读写时序: 以下是程序代码: #include <linux/module.h> #include <linux/init.h> #include <linux/miscdevice.h> #include <linux/interrupt.h> #include <linux/io.h> #include <linux/fs.h> #include <linux/slab.h>

驱动学习之驱动的设备文件

首先需要明白的一点是:一个硬件对应一个驱动,对应一个设备文件(/dev/),用来描述这个设备,将来应用程序就是通过这个设备文件来找到这个驱动. 1:设备号 = 主设备号+次设备号 主设备号标识的是设备的驱动告诉Linux内核使用哪一个驱动程序为该设备(也就是/dev下的设备文件)服务,次设备号则是具体唯一标识是哪个设备. 在linux中,通过mknod创建设备文件:mknod /dev/xxx  c  主设备号 次设备号  ,可以通过ls -l来查看xxx设备文件的信息.其中/dev/xxx:设

驱动学习之驱动和应用的接口

在前面讲过,驱动层是应用层是分离,驱动层的代码不能使用再应用层,应用层也不能直接操作驱动代码,那么应用层和驱动层之间是如何来实现数据间的交换的能,方法就是通过相应的接口函数. (1)copy_from_user unsigned long copy_from_user(void *to, const void __user *from, unsigned long n) {    might_sleep();      if (access_ok(VERIFY_READ, from, n))  

写作驱动学习

写作驱动学习 在软件开发领域有这样的几个名词 BDD.测试驱动开发(Test-driven development)是极限编程中倡导的程序开发方法,以其倡导先写测试程序,然后编码实现其功能得名 TDD.行为驱动开发(Behavior-Driven Development)是一种敏捷软件开发的技术,它鼓励软件项目中的开发者.QA和非技术人员或商业参与者之间的协作. DDD.领域驱动设计(Domain-Driven Design)的一个核心的原则是使用一种基于模型的语言. 而最近我处在于一个尴尬的位

编写驱动学习

写作驱动学习 在软件开发领域有这种几个名词 TDD.測试驱动开发(Test-driven development)是极限编程中倡导的程序开发方法,以其倡导先写測试程序.然后编码实现其功能得名 BDD.行为驱动开发(Behavior-Driven Development)是一种敏捷软件开发的技术,它鼓舞软件项目中的开发人员.QA和非技术人员或商业參与者之间的协作. DDD.领域驱动设计(Domain-Driven Design)的一个核心的原则是使用一种基于模型的语言. 而近期我处在于一个尴尬的位

linux驱动学习(1)——字符设备驱动开发

(一)驱动程序介绍 (a)Linux驱动程序学习 知识结构: 1. Linux驱动程序设计模式(40%) 2. 内核相关知识(30%) 3. 硬件相关知识(30%) (b)驱动分类: ①字符设备: 字符设备是一种按字节来访问的设备,字符驱动则负责驱动字符设备,这样的驱动通常实现 open, close,read和 write 系统调用. ②块设备: 在大部分的 Unix 系统, 块设备不能按字节处理数据,只能一次传送一个或多个长度是512字节( 或一个更大的 2 次幂的数 )的整块数据,而Lin

Linux驱动学习步骤(转载)

1. 学会写简单的makefile 2. 编一应用程序,可以用makefile跑起来 3. 学会写驱动的makefile 4. 写一简单char驱动,makefile编译通过,可以insmod, lsmod, rmmod. 在驱动的init函数里打印hello world, insmod后应该能够通过dmesg看到输出. 5. 写一完整驱动, 加上read, write, ioctl, polling等各种函数的驱动实现. 在ioctl里完成从用户空间向内核空间传递结构体的实现. 6. 写一bl

Linux驱动学习之Linux-2.6.20.4内核移植

最近一段时间一直在学习向TQ2440开发板移植内核.移植驱动.真心觉得这方面的知识有很大的难度.但是从另一角度去看,难度越大,能力提升的空间就越大!! 1.解压源码 从网上下载一个Linux 内核,我是用的是Linux-2.6.20.4.然后用命令解压.建议解压到"/home/用户名"目录下.我的内核源码存放在: 2.添加对ARM的支持 因为所用的是TQ2440开发板,属于ARM9.因此要在系统中添加对ARM的支持. 方法:进入内核源码目录, 修改"Makefile"