jz2440_驱动开发
文章平均质量分 70
记录linux驱动开发的点点滴滴
鸭鸭打瞌睡
这个作者很懒,什么都没留下…
展开
-
整理Linux启动流程
linux是怎么启动的呢?回答:按下电源键,玩耍手机基础概念BL0:SOC内置在iROM里的代码,是芯片厂商事先烧好的代码,这部分代码会根据指定的引脚电平决定从什么设备启动。BL0就是Nand Flash,NorFlash,iNand等设备的复制函数(因为要读Flash,所以要简单初始化以下Flash),他的主要工作是把BL1从Flash中拷贝到iRAM或NorFlash上运行。(BL0是SOC出厂前设置的,芯片厂商也不知道板子上将来接的是什么样的DRAM,因此配置和初始化内存和Flash就交给BL1原创 2022-01-30 22:27:43 · 2014 阅读 · 2 评论 -
写一个设备树的小框架,也方便以后写设备树的时候直接调用
基于linux4.4进行对驱动对设备树的读取设备树相对设备总线框架设备总线: 设备总线框架就是构造出一个device设备(装着硬件口的参数),再构造出一个drv驱动文件当两个文件能够连接,就调用里面的probe函数,和之前写原始字符设备一样,构造那些 file_operation结构体设备树: 引进设备树后相当于用设备树替换掉了,之前的device.c 程序, 内核会把设备树里面的node节点自动设成device 和我们写的drv进行匹配,当匹配的时候, drv程序 就和之前一样调用prob原创 2021-01-21 12:00:12 · 193 阅读 · 0 评论 -
WM8976G声卡驱动的研究
继续跟着韦老师的步伐,研究声卡WM8976G芯片硬件连接我们从芯片原理图上面看出,s3c2440连接我们的音频芯片是用 IIS总线进行传输,而通过下面的L3这三根线进行控制读一下芯片手册打开声卡的datasheet ,怎么快速开发呢,设备描述的,控制介绍分为两线和三线模式,开始的7bit是地址,后面的9bit控制的是对应的寄存器,两线模式对应的就是IIC沟通从原理图上看我们应该用的是三线模式,下面接入的为高电平...原创 2021-01-17 10:17:12 · 26395 阅读 · 4 评论 -
jz2440外接光敏电阻模块,光敏模块驱动编写
想着把stm32上面写好的单片机迁移到arm上写个驱动硬件电路分析我们的光感模块是有三个引脚,vcc,gnd,和一个数据传输位所以给出一个gpio作为外接位置,在没有焊接的孔上寻找一个gpio从图上看直接到了 gpioB8 ,这个图好难看懂还是自己技术太差了驱动编写找到对应的引脚的寄存器GPBCON 0x56000010GPBDAT 0x56000014选中引脚volatile unsigned long *gpbcon;gpbcon = (volatile unsigned l原创 2020-07-30 17:54:30 · 433 阅读 · 0 评论 -
DMA分析,和驱动的编写
DMA的分析DMA就是 direct memory access 假设我们有一段数据要在RAM里面进行拷贝,那么就要在cpu里面执行拷贝函数那我们进行智能一些,在内存里面让它自己拷贝,不占用cpu,这时候就会引进DMA—>手工启动当然DMA还支持在从总线里面进行直接的数据拷贝,比如说我们的I2S里面有传播的音频数据,那么直接就从I2S里面经行数据的拷贝不占用cpu----->硬件启动进行DMA驱动的编写打开我们的SOC手册,里面专门有一章介绍DMA在我们的驱动中有两种模式进行选原创 2020-06-07 17:41:41 · 453 阅读 · 0 评论 -
S5P6818电子数码相框(一) 中文和英文汉字点阵实现
先实现在LCD上面的中文,英文显示一个单纯的应用软件#include <sys/mman.h>#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>#include <linux/fb.h>#include <fcntl.h>#include <stdio.h>#include <string.h>#define FONT原创 2020-05-25 09:46:49 · 740 阅读 · 0 评论 -
用幼儿园的话描述arm裸机启动和链接脚本
文件启动分析一个裸机文件启动 要从汇编跳转到c 开始启动肯定是 .S 文件我们可以看看makefile里面 有啥 来判断启动的流程把.c文件 和开始的.S文件 编译成.o 文件 揉在一起 通过连接脚本 成为二进制文件.elf 再变成可以烧录的二进制文件.bin.S就是汇编文件 ,作为第一个启动的文件 通过关看门狗,设置时钟,设置异步,设置栈,就到了我们的 重定位代码重定位分析...原创 2020-04-27 14:26:48 · 351 阅读 · 0 评论 -
网卡驱动程序修改厂家代码进行移植_DM9000
官网有写好的驱动文件,可以下载下来进行修改,但是有些地方不一样现在找出来从soc的手册上面我们找到,片选引脚(nGCS4),和中断引脚(INT)设置片选通过在soc的datasheet里面 的 memory controller 找到当cpu发出的地址 在0x2000000到0x28000000 可以选中片选设置中断接到了cpu的外部中断7我们在入口函数里面设置中断号,并且设...原创 2020-04-23 12:55:35 · 344 阅读 · 0 评论 -
虚拟网卡驱动分析和编写
看看网路驱动文件系统的构造操作先构造一个虚拟的网卡根据上面的分析,参考 drivers\net\cs89x0.c 写自己的虚拟网卡设备驱动1分配分配一个net_device结构体2 设置2.1 写一个发包函数virt_net_send_packet这时候写出这个函数1 netif_stop_queue() //发数据时,先停止网卡的队列2 emulator_rx_pa...原创 2020-04-21 18:57:56 · 574 阅读 · 0 评论 -
NOR_FLASH分析和启动流程
先来看看NAND_FLASH 和 NOR_FLASH 的不同点原创 2020-04-21 00:06:47 · 1102 阅读 · 0 评论 -
NAND FALSH原理和驱动编写
nand falsh分析先看看 原理图nand falsh 和 2440之间只有数据线,所以数据,地址,命令都在DATA0~DATA7 上面传输当原创 2020-04-13 21:45:21 · 251 阅读 · 0 评论 -
制作最小根文件系统,并用NFS挂接
流程 : busybox -> ->NFS挂接配置busybox从官网上下载busybox 放入虚拟机里经行解压在 busy-box里面 使用 make menuconfig增加 TAB自动提醒Busybox Settings—>Busybox Library Tuning—>[*] Tab completion经行make不能直...原创 2020-04-12 11:25:46 · 200 阅读 · 0 评论 -
字符设备驱动小结,块设备驱动引入
之前学完的字符驱动设备进行一个小结原创 2020-04-04 20:05:56 · 122 阅读 · 0 评论 -
usb驱动的分析与编写
先看一下有关usb的介绍和接入usb的流程驱动和app 和usb的连接在usb设备总线里,把device放入usb_bus_type的dev列表从ubs_bus_type的driver链表里取出usb_driver把usb_interface和usb_driver的id_table比较如果能匹配调用driver的probe怎么写usb_driver usb 设备驱动程序如果...原创 2020-04-03 01:19:14 · 231 阅读 · 0 评论 -
触摸屏驱动编写
触摸屏要使用到输入子系统分析之前的输入子系统输入子系统详解用linux里面的 input.c 用两边的probe 匹配系统里的软件控制和驱动写出框架我们要写的就是 input_dev开始代码编写和分析分配一个input_dev结构体设置注册硬件相关的操作由于触发按键 中断时候 要用到 input_event 来上报事件1分配一个input_dev结构体2设置...原创 2020-03-31 22:21:50 · 968 阅读 · 0 评论 -
LCD驱动的硬件编写
根据上一篇文章 分析框架列出大致编写过程框架分析2设置查看 fb_info怎么定义进入 fb.h查看定义2.1从中列出固定参数设置fix结构体里的参数a. char id[16]; /* identification string eg “TT Builtin” / 名字b. unsigned long smem_start; / Start of frame bu...原创 2020-03-28 21:29:31 · 303 阅读 · 0 评论 -
LCD驱动框架分析
在内核里面 有驱动 Fbmem.c 用现成的驱动 写出自己的LCD驱动Fbmenm.c 分析app调用open假设app open("/dev/fb0",…) 主设备号29 次设备号0在内核中找到 注册驱动的程序找到 fp_open 函数得到设备节点的次设备号int fbidx = iminor(inode);构建fb_info 结构体struct fb_info ...原创 2020-03-26 02:18:57 · 241 阅读 · 0 评论 -
驱动程序分层分离_总线设备驱动模型
总线一个总线是处理器和一个或多个设备之间的通道. 为设备模型的目的, 所有的设备都通过一个总线连接, 甚至它是一个内部虚拟的"平台"总线。图为 总线驱动设备模型 在Device里面配置设备 在 Driver里面 修改驱动代码led_dev.c分配/设置/注册一个platform_device里面 有一个 led_resource 配置一个 led_resource第一个数组...原创 2020-03-18 21:03:46 · 214 阅读 · 0 评论 -
linux输入子系统框架和实现
输入子系统的框架解析自己写的驱动程序需要配合自己的应用才能使用,为了让驱动程序配合其他应用程序使用,使用输入子系统最上层 Event handler :提供用户编程的接口(设备节点),并处理驱动层提交的数据处理。不涉及硬件方面的具体操作,handler层是纯软件层,包含不同的解决方案,如键盘,鼠标,游戏手柄等;对于不同的解决方案,都包含一个名为input_handler的结构体,该结构体内...原创 2020-03-15 15:38:08 · 205 阅读 · 0 评论 -
字符设备驱动的同步互斥阻塞
目的在同一时刻,只能有一个app打开驱动文件,有三种方法1原子操作原子操作指的是在执行过程中不会被别的代码路径所中断的操作。常用原子操作函数举例:atomic_t v = ATOMIC_INIT(0); //定义原子变量 v 并初始化为 0atomic_read(atomic_t *v); //返回原子变量的值void atomic_inc(atomic_t *v); //原子变量增加...原创 2020-03-13 15:05:13 · 179 阅读 · 0 评论 -
开发板上调试字符设备驱动使用异步通知
之前的直接查询(耗资源),中断(read一直等待),poll(指定超时)都是软件主动read现在用signal驱动提醒应用1应用:注册信号处理函数2驱动发送信号给app3app要告诉驱动程序他的pid号4驱动里面调用kill_fasnyc函数对于应用程序的写法fcntl(fd, F_SETOWN, getpid()); // 告诉内核,发给谁应用程序会调用“fcntl()”这个函数...原创 2020-03-13 00:51:03 · 124 阅读 · 0 评论 -
字符设备驱动的poll机制
引入poll机制可以减少cpu资源占用由于之前的中断程序是通过不停的查询实现的,现在引入poll机制可以让中断程序进行休眠,而不是一直处于查询状态,让cpu资源占用率降低在用户层上,使用poll或select函数时,和open、read那些函数一样,也要进入内核sys_poll函数里poll机制poll > sys_poll > do_sys_poll > poll_...原创 2020-03-12 20:21:48 · 233 阅读 · 0 评论 -
linux驱动中断框架
在中断框架中系统帮我们做了,分为6点1,CPU 自动进入“异常模式”。调用“异常处理函数”。2,在“异常处理函数”中如跳到“b vector_irq + stubs_offset”。3,调用到列表中的“__irq_usr”后,可以具体分析这个“__irq_usr”中处理的情况4,“asm_do_IRQ”调用“irq_desc[IRQ 中断下标]以中断为下标取出里面的一项“handle_ir...原创 2020-03-11 12:11:43 · 501 阅读 · 0 评论 -
linux驱动程序和应用程序交互实现_基于2440
在学习安卓时候对驱动还是有疑惑 ,用jz2440重写驱动板子:jz2440系统:ubutu16最后所有代码在底部先配置板子uboot能与主机互相联通如果配置是开发版 192.168.31.10电脑 192.168.31.52440_ubuntu 192.168.31.514412 192.168.31.200配置uboot的ip和服务器ipset ipaddr 192.168...原创 2020-03-10 23:19:05 · 970 阅读 · 1 评论