驱动
文章平均质量分 91
饭小粒
蓝牙&Android&iOS&EN
展开
-
安卓bootloader:三分钟让你彻底理解uboot的启动与功能
1. Bootloader简介 系统上电后,需要一段程序来进行初始化:关闭看门狗,改变系统时钟,初始化存储控制器,将更多的代码复制到内存中等。它就是bootloader。 bootloader的实现非常依赖具体硬件,在嵌入式系统中,硬件配置千差万别,即使是相同的CPU,它的外设(比如flash)也可能不同,所以不可能有一个bootloader支持所有的CPU,所有的电路板。即使是支持CPU架构比较多的UBoot,也不是一拿来就可以使用(除非里面的配置刚好和你的板子相同)。需要进...转载 2021-01-07 20:53:56 · 1217 阅读 · 0 评论 -
freeRTOS中文实用教程2--队列
1.前言freeRTOS中所有任务的通信和同步机制都是基于队列来实现。2.队列的特点图 队列的读写操作队列的数据存储(1)队列可以保存有限个具有确定长度的数据单元,队列可以保存的最大单元数目称为队列的深度;(2)队列创建时需要设定队列深度和每个单元的大小;(3)队列先进先出多任务存取队列是内核中具有独立权限的对象,不属于任何任务,可以有多个任务进行读写读队列阻塞(1)任务读取队列数据时可以指定一个阻塞超时时间;(2)未超过阻塞超时时间,队列为空,任务将转载 2020-10-15 16:34:04 · 362 阅读 · 0 评论 -
freeRTOS中文实用教程1--任务
1.前言FreeRTOS是小型多任务嵌入式操作系统,硬实时性。本章主要讲述任务相关特性及调度相关的知识。2. 任务的总体特点任务的状态(1)任务有两个状态,运行态和非运行态(2)任务由非运行态转入运行态为切入,相反为切出设置优先级(1)最高优先级在FreeRTOSConfig.h 中 设 定 的 编 译 时 配 置 常 量configMAX_PRIORITIES中进行设置。注:FreeRTOS 本身并没有限定这个常量的最大值,但这个值越大,则内核花销的内存空间就越多。建议将此转载 2020-10-15 15:35:49 · 289 阅读 · 0 评论 -
字符设备驱动与块设备驱动、网络设备驱动的区别
在Linux操作系统下有3类主要的设备文件类型:块设备、字符设备和网络设备。这种分类方法可以将控制输入/输出设备的驱动程序与其他操作系统软件分离开来。字符设备是指存取时没有缓存的设备。典型的字符设备包括鼠标、键盘、串行口等。字符设备与块设备的主要区别是:在对字符设备发出读/写请求时,实际的硬件I/O一般紧接着发生。块设备则不然,它利用一块系统内存作为缓冲区,若用户进程对设备的请求能满足用户的要求,就返回请求的数据;否则,就调用请求函数来进行实际的I/O操作。块设备主要是针对磁盘等慢速设备设计的,以免耗费过转载 2020-10-12 10:39:39 · 1367 阅读 · 0 评论 -
ARM平台上蓝牙协议栈Bluez的移植使用和配置
前言blue简介蓝牙(Bluetooth),或称为蓝芽,是一种新式的无线传送协议,最初由爱立信创制,后来由蓝牙特别兴趣组订定技术标准。据说因为此技术尚在萌芽的阶段,故将Bluetooth以“蓝牙”的中文译名在台湾地区进行商业的注册,不过根据英文本身的意义直译,还是“蓝牙”较为贴切。蓝牙用于在不同的设备之间进行无线连接,例如连接计算机和外围设施,如:打印机、键盘等,又或让个人数字助理(PDA)与其它附近的PDA或计算机进行通信。目前市面上具备蓝牙技术的手机选择非常丰富,可以连接到计算机、PDA甚至转载 2020-09-14 17:10:26 · 2757 阅读 · 0 评论 -
高通 wlan 调试总结随笔
高通 wlan 调试总结随笔 1. 进入ftm模式 2. 抓取wifi log 2.1 抓取 Android log 2.1.1 How to enable wifi verbose log? 2.1.2 How to collect adb log and kernel log in one file? 2.1.3 How to open wpa_supplicant debug log? 2.2 抓取 Tcpdump 2.3 抓取 w转载 2020-09-11 15:55:03 · 5582 阅读 · 2 评论 -
块设备驱动框架详解
一、正确的理解块设备驱动的概念1、块设备和字符设备的差异(1)块和字符是两种不同的访问设备的策略(2)同一个设备可以同时支持块和字符两种访问策略(3)设备本身的物理特性决定了哪一种访问策略更适合(4)块设备本身驱动层支持缓冲区,而字符设备驱动层没有缓冲(5)块设备驱动最适合存储设备2、块设备驱动的特点(1)字符设备只能顺序访问(如串口发送数据顺序),而块设备可以随机访问(不连续块访问)。(2)传统的机械式块设备(如硬盘、DVD)虽然可以随机访问,但是连续访问效率更高.转载 2020-08-26 09:34:07 · 568 阅读 · 0 评论 -
DMA
DMA(Direct Memory Access,直接存储器访问) 是所有现代电脑的重要特色,它允许不同速度的硬件装置来沟通,而不需要依赖于 CPU 的大量中断负载。否则,CPU 需要从来源把每一片段的资料复制到暂存器,然后把它们再次写回到新的地方。在这个时间中,CPU 对于其他的工作来说就无法使用。原理DMA 传输将数据从一个地址空间复制到另外一个地址空间。当CPU 初始化这个传输动作,传输动作本身是由 DMA 控制器来实行和完成。典型的例子就是移动一个外部内存的区块到芯片内部更快的内存区。像是这转载 2020-08-22 06:42:47 · 425 阅读 · 0 评论 -
中断和中断处理流程
1. 中断概念中断是指由于接收到来自外围硬件(相对于中央处理器和内存)的异步信号或来自软件的同步信号,而进行相应的硬件/软件处理。发出这样的信号称为进行中断请求(interrupt request,IRQ)。硬件中断导致处理器通过一个上下文切换(context switch)来保存执行状态(以程序计数器和程序状态字等寄存器信息为主);软件中断则通常作为CPU指令集中的一个指令,以可编程的方式直接指示这种上下文切换,并将处理导向一段中断处理代码。中断在计算机多任务处理,尤其是实时系统中尤为有用。这样的系统转载 2020-08-18 21:16:43 · 3223 阅读 · 0 评论 -
片内Flash的认识
片上Flash(Embedded Flash)若干问题,包括Flash大小(内存映射)、块大小、页面大小、寄存器。这些知识,有利于写Flash驱动。通过数据手册(内存映射) 也可以通过数据手册得到Flash大小,首先根据型号从官网下得对应的数据手册Datasheet(点这里,输入MCU型号进行检索。STM32F103RB相关的手册都在这:http://www.st.com/internet/mcu/product/164487.jsp),打开找到Memory map这张图,如图2红框所示(图2...转载 2020-08-17 16:58:20 · 1540 阅读 · 0 评论 -
阿里云ubuntu18.04搭建图形界面的介绍
经过几天的奋战,在综合别人的宝贵经验之后,终于把阿里云的ubuntu18.04的图形界面搭配出来了,在此把我个人的经历分享给大家参考一下首先声明:我是参考原博主的经验搭建出来的,具体链接可以参考:https://blog.csdn.net/weimine/article/details/69055536附上截图:非常感谢他的无私分享,也感谢csdn的各位大神我这篇论文是对他的补充说明,因为我在安装的时候出现过不少问题,但最终都顺利解决了。第一步照做:1 sudo apt-get update转载 2020-08-13 11:35:45 · 607 阅读 · 5 评论 -
嵌入式驱动开发总结
对于大部分嵌入式产品来说,完整的开发过程基本包含对外部信息的采集(包括不限于传感器,按键,网络端),分析处理后,输出显示到其它设备或控制模拟电路,生成需要的脉冲,电压或电流。在这种背景下,很多模块和接口被提出并被设计出来,如adc, dac, pwm, uart, i2c, spi, qspi, can, eth, sdio, usb, ble, wifi, fsmc, hdmi 等,来应对不同场景的需求。而如何让这些模块正常工作,并能够控制外部的芯片满足最后功能的需求,驱动的概念应用而生,它是应用或系统访转载 2020-08-12 19:51:10 · 2168 阅读 · 0 评论 -
如何学习嵌入式
作者:Allen李康链接:https://zhuanlan.zhihu.com/p/97869854来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。好久没有更文,主要是最近工作实在是很忙,一直在赶进度,然后就一拖再拖。。。封面是我毕业后从事的第一份工作,无人机飞控研发,嵌入式真的很有意思,但是确实也需要一点耐心。OK,言归正传,最近一直有同学问我学习嵌入式的的路线是什么,说实话我当初也是一直在找这个答案,但是很不幸,我找了很多路线但是最后一条也没有走到底。.转载 2020-08-12 16:13:18 · 318 阅读 · 0 评论 -
常见硬件通信协议介绍
前言完整的硬件产品是由多种模块组合实现产品功能的,微控制器 MCU 充当大脑,外围的存储单元、显示单元、发声单元、传感器单元、运动单元等等是其躯干和四肢,而不同类型的硬件单元需要有机的结合起来,就离不开相互之间的数据通信,电子工业经过了百余年的发展,衍生出了繁多的协议,其中既有行业公认的标准协议,也有企业自研的内部标准,这些协议通常可以分为并行通信协议和串行通信协议。并行通信,在同一时刻发送多位数据(可以是多根线)。优点是发送速度快;缺点是传输距离短 资源占用多。 串行通信,用一根线 在不同的时刻转载 2020-08-09 16:11:30 · 5295 阅读 · 2 评论 -
int *p1 = new int[10]; int *p2 = new int[10](); 区别
下面描述正确的是int *p1 = new int[10];int *p2 = new int[10]();p1和p2申请的空间里面的值都是随机值p1和p2申请的空间里的值都已经初始化p1申请的空间里的值是随机值,p2申请的空间里的值已经初始化(对)p1申请的空间里的值已经初始化,p2申请的空间里的值是随机值解释在C++primer(第5版)中关于new的讨论有:1、new当个对象new在自由空间分配内存,但其无法为其分配的对象命名,因次是无名的,分配之后返回一个指向该对象的指针。.转载 2020-08-08 16:30:01 · 1650 阅读 · 0 评论 -
Nand flash基本原理
前面了解了随机存取存储器的基本原理,其主要是通过电容的充放电来保证数据的读写,当掉电后,其数据也丢失了,这节我们主要学习下flash的基本组成和原理。现在Flash在嵌入式系统中的地位和pc上的硬盘类似,用于保存系统运行所必须的系统,数据和应用层序,与内存掉电后丢失不同,它在掉点后仍可永久保存。 1. 闪存存储单元 对于闪存,我们常见的有SLC和MLC两种,细分还有eSLC和eMLC等,因为闪存式一种电压元件,因此它是以不同的电压范围来代表不同的数据,现在看看两者之间的区别。 1) SLC(转载 2020-08-08 15:23:25 · 5755 阅读 · 0 评论 -
移植uboot-分析uboot启动流程(详解)
本节总结:uboot启动流程如下:1)设置CPU为管理模式 2)关看门狗 3)关中断 4)设置时钟频率 5)关mmu,初始化各个bank 6)进入board_init_f()函数(初始化定时器,GPIO,串口等,划分内存区域) 7)重定位 复制uboot,然后修改SDRAM上的uboot链接地址) 8)清bss 9)跳转到board_init_r()函数,启动流程结束1.首先来安装arm-linux-gcc-4.3.2交叉编译器mkdir arm-li...转载 2020-08-08 08:29:43 · 510 阅读 · 0 评论 -
U-Boot
目录结构:* board目标板相关文件,主要包含SDRAM、FLASH驱动;* common 独立于处理器体系结构的通用代码,如内存大小探测与故障检测;* cpu 与处理器相关的文件。如mpc8xx子目录下含串口、网口、LCD驱动及中断初始化等文件;* driver 通用设备驱动,如CFI FLASH驱动(目前对INTEL FLASH支持较好)* doc U-Boot的说明文档;* examples可在U-Boot下运行的示例程序;如hello_world.c,timer.c;.转载 2020-08-08 08:17:35 · 97 阅读 · 0 评论 -
荔枝派nano上手笔记(一)移植Uboot
在放假前就买了荔枝派nano和zero这俩块小板子,打算寒假上手玩一下,但是赶放假看了看官方的文档发现那时的水平还不太能玩的动,那时对Linux基本不太熟悉,只会一些简单的操作,经过了快一个月的学习,现在感觉自己已经可以来试着玩玩了,同时也是为开学上手驱动开发打些基础,今天玩了玩nano这块板子,在板子上移植了Uboot。一、硬件参数 CPU: 全志 F1C100s, ARM 926EJS , 最高 900MHz 内存: 集成32MB DDR 存储:...转载 2020-08-08 06:31:12 · 1177 阅读 · 0 评论 -
从零开始 荔枝派nano TF卡启动
1.开发环境# 获取编译器sudo mkdir /usr/local/armcd /usr/local/arm wget http://releases.linaro.org/components/toolchain/binaries/7.2-2017.11/arm-linux-gnueabi/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi.tar.xztar -vxJf gcc-linaro-7.2.1-2017.11-x86_64_arm转载 2020-08-07 19:53:47 · 1213 阅读 · 2 评论 -
U-boot开发环境搭建
1.从u-boot官网下载最新u-boot文件。ftp://ftp.denx.de/pub/u-boot/2.在虚拟机中安装交叉编译工具。https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads从ARM官网地址中下载对应的gcc-arm-none版本即可。下载完成后拷贝到linux系统中进行解压安装。3.添加工具链的环境变量将虚拟机 home本地目录.bashrc文件的最后两行加上export PATH=转载 2020-08-06 15:09:49 · 374 阅读 · 0 评论 -
Linux进程的内存空间布局
此文也可看作是Linux下C程序的内存空间布局(虚拟地址),因为在Linux下的C编译器本质上也是一个进程,编译器再强大也得在操作系统的保护模式下运行。内存空间布局 在Linux中,进程的内存空间按低地址到高地址的顺序分为:代码段text、数据段data、bss段、堆、栈和内核数据区(命令行参数和环境变量等)。如下图所示: 从C程序的角度来说,低地址的三块内存区域由编译器和链接器规划地址空间,在程序被操作系统加载之前它们地址就固定了。堆和栈是可增长的,它们的增长方向...转载 2020-07-31 09:22:10 · 226 阅读 · 0 评论 -
上海高通面试总结
面试考察点:基础是否扎实。 代码能力。 数学能力。具体问题考察侧重点:业务水平:能不能讲清楚自己做过的项目(包括项目起源、项目主要任务、项目的目标、项目的结果、对项目的反思)并说清楚自己在项目中扮演的角色、你的工作思路。 发展潜力:最常见的问题[以你现在的水平(技术经验)来看,过去你参与的xxx项目有什么缺点,如果是现在的你,会如何处理这些缺点?]考察复盘能力,看是否有总结。 解决问题的能力:面试官结合你的经历提出更加深入的问题。主要考察拟解决问题的思路。具体问题: 对原来实习经历转载 2020-07-29 16:13:27 · 1610 阅读 · 0 评论 -
中断上下文
一、中断下半部-工作队列1、中断 先看一下宋宝华先生的《linux设备驱动开发详解》里面对中断的描述吧。这本书个人感觉 写的比较好,从开始学驱动到现在,还能从中得到不少知识。 设备的中断会打断内核中进程的正常调度和运行,系统对更高吞吐率的追求势必要求中断服务程序尽可能地短小精悍。但是,这个良好的愿望往往与现实并不吻合。在大多数真实的系统中,当中断到来时,要完成的工作往往并不会是短小的,它可能要进行较大量的耗时处理。如下图描述了Linux内核...转载 2020-07-23 10:27:59 · 206 阅读 · 0 评论 -
Android HAL 层原理分析
Android HAL 简介Android 系统硬件抽象层(Hardware Abstract Layer)运行在用户空间中,它向下屏蔽了硬件驱动的实现细节,向上提供了硬件访问的服务。通过 HAL 层,Android 系统分为两层来支持硬件设备,其中一层实现在用户空间,另外一层实现在内核空间中,它在 Android 系统框架中的位置如下图所示。传统的 Linux 系统则把对硬件的支持和管理全部放在内核空间中,即把对硬件的全部支持都放在硬件驱动模块当中。为什么要添加一个 HAL 层?Andr.转载 2020-07-23 10:25:41 · 1147 阅读 · 0 评论 -
Android HAL层库加载原理
Android HAL层库加载原理Android HAL层的由来:由于市面做移动芯片的厂商很多,大部分厂商考虑到自己硬件的设计架构、安全、专利等方面原因,不愿意公开自己的这方面代码,也出于不同厂商硬件架构不太一样,适配开发难度周期长,GOOGLE在kernel之上加了一个HAL层,只要各个厂商实现Android 所需要的功能接口,可以以库的方式提供不用开源。问题来了,android如何实现针对不同的Hardware Module进行通用性调用的呢?以加载camera HAL层库为例:#def转载 2020-07-23 10:15:18 · 435 阅读 · 0 评论 -
usb cdc 协议
什么是CDC类 (Communication Device Class) USB的CDC类是USB通信设备类 (Communication Device Class)的简称。CDC类是USB组织定义的一类专门给各种通信设备(电信通信设备和中速网络通信设备)使用的USB子类。根据CDC类所针对通信设 备的不同,CDC类又被分成以下不同的模型:USB传统纯电话业务(POTS)模型,USB ISD...转载 2018-12-25 11:29:12 · 24768 阅读 · 0 评论 -
MTK fm驱动移植
<br /> MTK fm驱动移植 收藏 <br />如果硬件添加更改了一块FM芯片,而驱动往往是由芯片供应商提供,我们需要做的工作是移植。<br />假设供应商提供的驱动是:<br />Qndriver.c<br />Qndriver.h<br />以下分4个步骤完成,看好<br />1.更改芯片ID<br /> 在文件XXX_GPRS.mak (make目录下,XXX与平台有关)中找到<br />FM_RADIO_CHIP = AR1000 # NONE, MT6189A1, MT6188A1,转载 2011-04-17 23:56:00 · 2485 阅读 · 1 评论