![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux驱动
RTC_Kai
学生
展开
-
块设备驱动
块设备驱动引入对FLASH、硬盘等读写操作进行优化,特别是针对FLASH需擦除后才能烧写情况。磁盘是通过磁头对每个磁道上的扇区进行访问,块设备驱动中将读写加入到队列中,然后进行对应排序、合并等进行优化,采用电梯调度算法elv_merge,类似于把所有上去的一次性送完在送上去的。这种做法是因为对磁盘操作的步骤开销较大,比较繁琐,扇区零散将导致读写效率低,因此对各个扇区的读写应先缓存起来,在进行优...原创 2019-11-23 09:30:13 · 179 阅读 · 0 评论 -
USB驱动
USB设备初识USB的接口有4条线(5V、GND、D-、D+),其中PC上的D-和D+都接有15k的下拉电阻,未接入设备时未低电平,USB设备的D-或D+接有1.5k的上拉电阻,USB设备接入PC后,就会把PC上的USB口的D-或D+拉高,通过硬件方式通知PC机有新设备接入,新接入的USB设备的默认编号为0,在未分配新编号前,PC使用0编号和它通信。USB总线驱动程序向USB设备发出命令获取US...原创 2019-11-22 20:51:09 · 416 阅读 · 0 评论 -
根文件系统的制作
根文件系统的启动流程打开/dev/console,并执行sys_dup(0),sys_dup(0),即将标准输入输出错误重定位到console终端,而该console也是串口0的输出。run_init_process为跳转指令,只要执行了就不再返回。若用户指定了execute_command=xxx则执行run_init_process(execute_command),一般指定为linux...原创 2019-11-22 14:33:54 · 189 阅读 · 0 评论 -
内核移植
内核版本选择内核官网:https://www.kernel.org/注意:本文采用内核3.14讲解。选择一个内核所支持的CPU类型和board外围配件与板子最接近的版本,较少工作量。注意:uboot和kernel不能再window共享目录下解压,因为window不支持符号链接文件,即.map文件,会导致编译不了。配置编译在编译时,对内核进行选配,在Makefile文件中指定对应编译...原创 2019-11-21 16:36:36 · 192 阅读 · 0 评论 -
内核调试方法
内核启动流程自解压内核 decompess (arch/arm/boot/compressed/head.S)运行内核汇编部分 head.S入口start (arch/arm/kernel/head.S) 检测合法性(CPU类型,机器类型)运行内核C部分 start_kernel (init_main.c),CPU,机器参数的安装,setup_arch,中断,定时,终端,内存等最基本的初始...原创 2019-11-21 12:19:51 · 178 阅读 · 0 评论 -
设备树开发
设备树设备树描述的信息包括:CPU的数量和类别、内存基地址和大小、总线和桥、外设连接、中断控制器和中断使用情况、GPIO控制器和GPIO使用情况、Clock控制器和Clock使用情况。以上信息被保存在一个ASCII文件中,类似于xml文件,在ARM Linux中,一个.dts文件对应一个ARM的machine放置在内核的arch/arm/boot/dts目录。设备树文件用于操作系统中描述硬...原创 2019-11-20 09:19:35 · 281 阅读 · 0 评论 -
I2C驱动框架
I2C驱动开发I2C是一种接口,数据通过该接口需遵循I2C协议,对于驱动开发者相当于I2C从设备(硬件芯片)开发。包括:cmos camera摄像头(前置、后置)ts触摸屏gsenor重力传感器eeprom存储设备HDMI高清输出接口(机顶盒与显示屏连接)。另外,主机与显示屏是通过VGA接口。接口I2C是多主控总线,所以任何一个设备都能像主控器一样工作,并控制总线。总线上每一个...原创 2019-11-19 18:54:59 · 563 阅读 · 0 评论 -
输入子系统框架---按键
输入子系统常见的输入设备:keyboard 键盘mouse 鼠标touchcreen 触摸屏joystick 游戏杆实现步骤简析共同点:驱动层:设备号的注册申请、创建设备节点、硬件初始化(以及其他有关硬件初始化)、实现fop、阻塞、用户交互的接口函数read、write等。应用层:通过文件io接口和指定的接收缓冲区格式(struct input_event)对设备模块.ko...原创 2019-11-18 22:08:42 · 175 阅读 · 0 评论 -
高级io模型
高级IO模型一般对于底层硬件的中断,一般表示有数据发生,如果要去读取该中断产生的数据值,则需要通过文件io在进程上下文中进行交互(read),文件io交互的方式由分为5种模型:非阻塞(O_NONBLOCK,一旦调用立刻执行,若没有数据则返回-EAGAIN错误码,提醒重试)阻塞(休眠加入等待队列)多路复用(select、poll、epoll)对应驱动fileoperation对象的poll...原创 2019-11-14 11:46:20 · 124 阅读 · 0 评论 -
设备树pinctrl系统------中断事件框架
中断解决轮询对处理器的占资源缺陷。硬件模型:中断源 ------- GIC(屏蔽、优先级、记录、区分)-------FIQ/IRQ---------A9处理器linux内核软件模型:中断号与中断处理函数Arm裸奔:中断源硬件初始化、中断号、GIC初始化、A9初始化、异常向量表、中断处理函数对于linux内核模型:中断号的获取:1.宏定义 IRQ_EINT(号码) //下图对应...原创 2019-11-14 11:46:00 · 496 阅读 · 0 评论 -
字符设备
字符设备设备号 = 主设备号(占高字节)+次设备号(占低字节)。在/proc/devices列举出所有已经注册的设备号。文件操作对象,提供open、write、read。框架获取并注册设备号不同linux版本对应字节数不一样,一般用内核提供的函数获取 MKDEV(ma,mi)。方式1:register_chrdev 第一个参数为0则动态注册,第一个参数非0则静态注册卸载1...原创 2019-11-13 10:35:40 · 152 阅读 · 0 评论 -
MAKEFILE、驱动模块传参、符号导出
Makefile代码讲解:make命令调用Makefile文件,并且对其执行两次,第一次进入ifeq语句内编译内核源码,第二次根据hello.o对其进行编译生成模块。make clean命令删除所有当前目录下的.ko文件make install命令将.ko文件拷贝到根文件系统目录下ROOTFS = /根文件系统路径ifeq ($(KERNELRELEASE), )KERNEL...原创 2019-11-12 16:17:07 · 360 阅读 · 0 评论 -
开发板环境的搭建
交叉编译工具将文件拷贝到linux目录下,解压设置环境变量:vim ~/.bashrc 最后添加 解压后文件内的bin文件路径export PATH=$PATH:xxx/bin更新环境变量:source ~/.bashrc开发板启动方式开发板在启动上电后会启动uboot加载内核以及加载dtb设备文件,内核加载时需根据dtb文件对相关硬件进行初始化,内核加载完毕后挂载根文件系统。u...原创 2019-11-12 10:58:31 · 571 阅读 · 0 评论