Android底层驱动开发(十一)

这篇具有很好参考价值的文章主要介绍了Android底层驱动开发(十一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、WiFi开发流程

二、计算机网络

(一)HTTP报文格式

(二)TCP报文格式

(三)UDP(User Datagram Protocol)报文

(四)IP报文格式

三、总线与通信协议

(一)基本概念

(二)GPIO

(三)I2C

(四)PCIe

(五)UART

(六)SPI

(七)MIPI

(八)USB

四、Linux内核无线子系统

(一)相关术语

(二)Linux无线子系统整体结构

五、WLAN/BT协议栈

(一)WLAN协议

(二)BT协议栈

六、WiFi概述

(一)WLAN与WiFi

(二)WiFi协议

(三)WiFi数据包

(四)设备安全接入过程

(五)漫游

(六)相关技术

七、WLAN概述

(一)Wireless tools for Linux

(二)wpa_supplicant

(三)热点Hotspot

(四)Green Tx(GTx)

(五)WiFi Sniffer

(六)WCNSS_qcom_cfg.ini常用参数

八、BT概述

(一)Bluetooth 4.0 on Android KitKat

(二)Bluetooth 4.1 on Android Lollipop

(三)Bluetooth 4.2 on Android Marshmallow and Nougat

(四)Bluetooth 5.0 on Android Oreo

九、其他无线通信技术

(一)UWB

(二)Sub-GHz


一、WiFi开发流程

1、硬件部分评估

(1)项目是基于高通的哪一个硬件平台设计的(确定与WiFi芯片连接的SOC芯片)

(2)项目硬件平台是否支持项目使用的WIFI/BT模组

(3)对比项目与高通参考设计的变更点

  • 电源供电部分
  • Enable(使能引脚),Reset(重置),Wakeup,Uart GPIO pin   电路图中找
  • 天线部分
  • 时钟部分

2、软件部分评估:项目基线代码是否支持项目所使用的模组选型(需要与高通确认)

  • 私码部分
  • 高通提供的相关bin文件是否完整(Firmware,BDF,Micro Code,Regulatory database)
  • host驱动,platform驱动,etc.

3、软件bring up(启动起来)

(1)根据原理图配置项目使用module的defconfig    ymn   config/kconfig/defconfig/menuconfig/.config对比

(2)配置kernel Device Tree

  • xxx-pinctrl.dtsi  定义连接GPIO管脚,主芯片管脚
  • wifixxx-pcie.dtsi    定义PCIE管脚
  • btxx-qupv3.dtsi     定义uart管脚    QUP:可以配置好几种通信协议总线
  • xx-hsp.dtsi(芯片名.dtsi

(3)编译WIFI、BT驱动,及相应的附属驱动(PCIE, SDIO,RFKILL …),检查驱动正确加载

(4)检查FW(固件)文件(amss.bin, m3.bin, bdwaln.elf   BDF, regdb.bin)

(5)编译debug工具(wpa_cli, iw, ifconfig …)

(6)WIFI、BT上层服务确认

(7)Setting 确认扫描连接基本功能

4、RF(射频)Team 测试优化:校准,优化参数写入bdwlan.elf文件

  • 各个channel(频道)功率校准
  • NV校准值,天线配置
  • 软件配置

5、软件功能QA测试

  • 压力稳定性测试
  • 传输速率,吞吐率测试
  • Feature测试以及Bug修复

二、计算机网络

数据的传输过程

Android底层驱动开发(十一)

Android底层驱动开发(十一)

协议数据单元在应用层、表示层和会话层被称做数据(Data),在传输层被称做分段(Segment),在网络层被称做(Packet),在数据链路层被称做(Frame),在物理层被称做比特(Bit)

PC1执行OSI七层的封装,然后把比特流传到集线器;集线器在物理层把信号简单放大后,把比特流传到路由器R1;R1执行OSI下三层的处理后,再把比特流传到R2;R2执行OSI下三层的处理后,再把比特流传到交换机;交换机执行OSI下二层的处理后,再把比特流传到服务器

物理层的设备不改变帧的格式,广播式转发;数据链路层的设备也不改变帧的格式,但可以根据数据帧中的目的MAC地址进行转发;网络层的设备改变帧的格式,要执行帧的解封装和再封装,但不改变数据包中的源和目的IP地址。

(一)HTTP报文格式

Android底层驱动开发(十一)

Android底层驱动开发(十一)

请求报文主要由三部分组成:起始行、头部字段、消息正文。起始行描述请求或响应的基本信息,由请求方法、URI 、HTTP 版本三个字段组成;头部字段使用key-value形式详细地说明报文;消息正文是实际传输的数据,不一定是纯文本,也可以是图片、视频等二进制数据。起始行和头部字段并称为请求头或响应头 Header,消息正文称为实体 body。HTTP 协议规定每次发送的报文必须有 Header,但可以没有 body,header 和 body 之间必须要有一个空行 CRLF 

(二)TCP报文格式

Android底层驱动开发(十一)

1、源端口和目的端口:标识发送/接收数据的应用程序,不同的应用程序占用不同的端口号

2、序列号Seq:标识从TCP源端向目的端发送的字节流,解决包乱序问题,发起方发送数据时对此进行标记。初始序列号是一个 32 位的随机生成的计数器,每 4 微秒 + 1,每一个 TCP 连接都会有一个不同的初始序列号,防止出现序列号重叠的情况

3、确认号Ack:只有 ACK 标志位为1时,确认序号字段才有效,Ack=Seq+1;目的是确认发出去对方是否有收到,解决丢包问题

4、偏移offset:4位,实际指出了 TCP 报文段的首部长度。它指出了 TCP报文段的数据起始处距离TCP报文的起始处有多远。一个数据偏移量为4 byte,4 位二进制数能表示的最大数字是 15,因此数据偏移的最大值是 60 byte,这也侧面限制了 TCP 首部的最大长度

5、保留字段reserved

6、标志位flags:6位

  • URG:值为1时,表示紧急指针 urgent pointer 有效。告诉系统此报文段中有紧急数据,应尽快传送,而不要按原来的排队顺序来传送。
  • ACK:确认序号有效
  • PSH:当 PSH = 1 的时候,表示该报文段高优先级,接收方 TCP 应该尽快推送给接收应用程序,而不用等到整个 TCP 缓存都填满了后再交付。
  • RST(reset the connection):重置连接,用于复位因某种原因引起出现的错误连接,也用来拒绝非法数据和请求。出现的原因包括没有识别正确的 IP 端口、请求超时、取消一个已存在的连接等
  • SYN:发起一个新连接
  • FIN:释放一个连接

7、窗口:16位,指的是接收通告窗口,是 TCP 流量控制的一个手段,用于告诉对方本端的 TCP 接收缓冲区还能容纳多少字节的数据,对方可据此控制发送数据的速度

8、校验和:16 位,由发送端填充,接收端对TCP报文段执行 CRC 算法以检验TCP报文段在传输过程中是否损坏

9、紧急指针:16 位,一个正的偏移量,和序号字段的值相加表示最后一个紧急数据的下一字节的序号,因此,这个字段是紧急指针相对当前序号的偏移。TCP的紧急指针是发送端向接收端发送紧急数据的方法

(三)UDP(User Datagram Protocol)报文

Android底层驱动开发(十一)

每个 UDP 报文分为 UDP 报头和 UDP 数据区两部分。报头由 4 个 16 位的字段组成,分别说明该报文的源端口、目的端口、报文长度和校验值

  • 源端口号 Source Port:通常包含发送数据报的应用程序所使用的 UDP 端口。
  • 目标端口号 Destination Port:表示接收端端口
  • 长度 Length:表示 UDP 数据报长度,包含 UDP 报文头和 UDP 数据长度。最小 8 字节(只有报头),最大 65535 字节。
  • 校验和 Checksum:保证数据安全性,也提供差错检测(用于校验报文段从源到目标主机的过程中,数据的完整性是否发生了改变)功能。保存的是报头前三个字段和的反码,丢弃溢出位,当报头四个字段和的比特位全为 1 时,表示无差错

(四)IP报文格式

在TCP/IP协议中,使用IP协议传输数据的包被称为IP数据包,每个数据包都包含IP协议规定的内容。IP 协议规定的内容被称为IP数据报文(IP Datagram)或IP数据报。IP数据报文由首部(称为报头)和数据两部分组成。首部的前一部分是固定长度,共20字节,是所有IP数据报必须具有的。在首部的固定部分的后面是一些可选字段,其长度是可变的。

Android底层驱动开发(十一)

  • 版本(version):4位,表示IP协议的版本。通信双方使用的 IP 协议版本必须一致
  • 首部长度:4 位,可表示的最大数值是15。这个字段所表示数的单位是32位字长(4字节)。因此,首部长度最大值为60字节。当IP分组的首部长度不是4字节的整数倍时,必须利用最后的填充字段加以填充。
  • 区分服务(tos):也称服务类型,占8位,用来获得更好的服务。在使用区分服务时才起作用
  • 总长度(totlen):首部和数据之和,单位为字节。总长度字段为16位,因此数据报的最大长度为 2^16-1=65535字节
  • 标识(identification):用来标识数据报,占16位。IP 协议在存储器中维持一个计数器。每产生一个数据报,计数器就加 1,并将此值赋给标识字段。当数据报的长度超过网络的 MTU而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中。具有相同的标识字段值的分片报文会被重组成原来的数据报。
  • 标志(flag):占3位。第一位未使用,值为 0。第二位称为 DF(不分片),表示是否允许分片,取值为 0 时,表示允许分片;取值为 1 时,表示不允许分片。第三位称为 MF(更多分片),表示是否还有分片正在传输,值为 0 时表示没有更多分片需要发送,或数据报没有分片
  • 片偏移(offsetfrag):占13位。当报文被分片后,该字段标记分片在原报文中的相对位置。片偏移以8个字节为偏移单位,除最后一个分片,其他分片的偏移值都是8字节的整数倍
  • 生存时间(TTL):表示数据报在网络中的寿命,占8位,由发出数据报的源主机设置。其目的是防止无法交付的数据报无限制地在网络中传输,从而消耗网络资源。路由器在转发数据报之前,先把 TTL 值减 1,若 TTL 值减少到 0,则丢弃这个数据报,不再转发。因此,TTL 指明数据报在网络中最多可经过多少个路由器。TTL 的最大数值为 255。若把 TTL 的初始值设为 1,则表示这个数据报只能在本局域网中传送。
  • 协议:表示该数据报文所携带的数据所使用的协议类型,占8位。不同的协议有专门不同的协议号,该字段可以方便目的主机的 IP 层知道按照什么协议来处理数据部分。TCP 的协议号为 6,UDP 的协议号为 17,ICMP 的协议号为 1。
  • 首部检验和(checksum):用于校验数据报的首部,占16位。数据报每经过一个路由器,首部字段都可能发生变化(如TTL),需要重新校验。数据部分不发生变化,不用重新生成校验值
  • 源地址:表示数据报的源 IP 地址,占 32 位。
  • 目的地址:表示数据报的目的 IP 地址,占 32 位。该字段用于校验发送是否正确。
  • 可选字段:用于一些可选的报头设置,主要用于测试、调试和安全。选项包括严格源路由(数据报必须经过指定的路由)、网际时间戳(经过每个路由器时的时间戳记录)和安全限制
  • 填充:由于可选字段中的长度不是固定的,使用若干个0填充该字段,可以保证整个报头的长度是32位的整数倍
  • 数据部分:表示传输层的数据,如保存TCP、UDP、ICMP或 IGMP 的数据,长度不固定

三、总线与通信协议

(一)基本概念

1、串行与并行

  • 串行:数据按位顺序传输,同一时刻只可以传输一个bit。仅使用一根数据线,适用于计算机与计算机之间、计算机与外设之间的远距离传输,但传输速度相对较慢,且控制复杂
  • 并行:数据各个位同时传输,可以以字节/字为单位进行传输。数据传输速率较快,但占用引脚资源较多,故不适合远距离传输(一般同时传输几个位就需要几根数据线)

2、同步与异步(串行)

  • 同步:发送端和接收端使用同一时钟,使双方完全同步,一次可以传多个字符数据,传输信息量大、传输速率高,但技术要求高。如I2C、SPI
  • 异步:发送端和接收端使用各自的时钟控制数据的发送和接收,是一种不连续的传输方式,一次只能传输一个字符数据。不需要同步时钟,通信实现简单,但传输速率不高。如UART

3、单工、半双工、全双工(串行)

  • 单工:数据只能沿一个方向传输,不能反向
  • 半双工:允许数据在两个方向传输,但同一时刻,只能沿一个方向传输
  • 全双工:允许数据同时在两个方向传输

4、总线:一组信号线的集合,是系统中各功能部件之间进行信息传输的公共通道,一般由数据线、地址线、控制线等构成,主要分为内部总线、系统总线和外部总线/IO总线三种

  • 内部总线是微机内部各外围芯片与处理器之间的总线,用于芯片级的互连
  • 系统总线是微机中各插件板与系统板之间的总线,用于插件板级的互连
  • 外部总线则是微机和外部设备之间的总线,用于设备一级的互连

5、上拉电阻与下拉电阻

  • 上拉电阻:通过电阻与电源相连,将不确定的信号钳位到高电平;是向设备输入电流
  • 下拉电阻:通过电阻与地相连,将不确定的信号钳位到低电平;是从器件输出电流

(二)GPIO

GPIO(General Purpose Input Output):通用输入/输出,简称IO口或总线扩展器,由引脚和功能寄存器组成,通过在驱动层读写GPIO口的功能寄存器来改变连接在此GPIO上的外设状态

  • 推挽输出(push–pull output):一种使用一对选择性地从相连负载灌电流或者拉电流的器件的电路,通常使用一对参数相同的功率三极管或MOSFET管,以推挽方式存在于电路中。电路工作时,两只对称的开关管每次只有一个导通,输出既可以向负载灌电流,也可以从负载抽取电流,即既可以输出高电平,又可以输出低电平
  • 开漏输出(Open drain output):不输出电压,控制输出低电平时引脚接地,控制输出高电平时引脚既不输出高电平,也不输出低电平,为高阻态。如果外接上拉电阻,则在输出高电平时电压会拉到上拉电阻的电源电压。

(三)I2C

I2C(Inter Integrated Circuit):双向二线制同步串行总线(串行数据线SDA和串行时钟线SCL),主要用于SOC与外设的连接通讯。串行、同步、非差分、低速率、半双工通信总线

  • 采用主从模式,主的一方可以读写数据,从的一方没有主动权,只能等待被读写
  • 接口输出模式为开漏输出,且要求外设的输出模式也是开漏输出。SDA与SCL都外接了上拉电阻,所以当SDA空闲时输出的永远是高电平
  • I2C为每个设备提供了一个地址,可以通过这个地址找到不同的设备,只有从设备收到是自己的地址时才响应。I2C上可连接多个设备,因此,从设备需要设置自己的地址(地址不能超过7个bit),但主设备不用,因为主设备负责读写其它设备,不会被从设备读写的
  • 开始信号:SCL为高电平,而SDA由高到低跳变;结束信号:SCL为高电平,而SDA由低到高跳变
  • 传输过程:每次传输时的数据/地址以9位bit进行传输,前8位是数据,最后一位是应答位;传输时高位在前,低位在后

Android底层驱动开发(十一)

(四)PCIe

PCIe(peripheral component interconnect express):一种高速串行点对点双通道高带宽全双工传输的计算机扩展总线标准,所连接的设备分配独享通道带宽,不共享总线带宽。

  • 通道lane:由两个差分信号对组成,一对用于接收数据,一对用于发送数据,因此每条通道都由四根线组成,每条通道都可用于全双工通信
  • 链路/互连link:两个端口之间点对点通信的通道。一条链路由一条或多条通道组成,链路包含的通道数称为链路宽度
  • 分层结构:物理层PHY、数据链路层(data link layer)、事务层(transaction layer)

(五)UART

UART(Universal Asynchronous Receiver Transmitter):通用异步收发器,一种串行、异步、全双工的通信协议

  • 硬件连接仅需要3条线:TX(发送数据端,接对面设备的RX)、RX(接收数据端,接对面设备的TX)、GND(保证两设备共地,有统一的参考平面)
  • 有两线、四线的UART模式,两线的UART模式只有TX、RX两个数据线(其实还有GND地线、电源线等),而四线的UART模式,除了TX和RX外,还有RTS和CTS,RTS表示request/ready to send,CTS表示 clear to send
引脚号 缩写符 信号方向 说明
1 DCD 输入 载波检测
2 RXD 输入 接收数据
3 TXD 输出 发送数据
4 DTR 输出 数据终端准备好
5 GND 公共端 信号地
6 DSR 输入 数据装置准备好
7 RTS 输出 请求发送
8 CTS 输入 允许发送
9 RI 输入 振铃指示
  • 空闲位:当总线处于空闲状态时,信号线的状态为‘1’,即高电平
  • 起始位:开始进行数据传输时发送方要先发出一个低电平’0’来表示传输字符的开始
  • 数据位:起始位之后就是要传输的数据,数据可以是5,6,7,8,9位,构成一个字符,一般都是8位。先发送最低位最后发送最高位。
  • 奇偶校验位:数据位传送完成后,要进行奇偶校验,校验位其实是调整个数。串口校验分几种方式:无校验(no parity);奇校验(odd parity,如果数据位中1的数目是偶数,则校验位为1,否则为0);偶校验(even parity,如果数据为中1的数目是偶数,则校验位为0,否则为1);mark parity(校验位始终为1);space parity(校验位始终为0)
  • 停止位:数据结束标志,可以是1位,1.5位,2位的高电平。

(六)SPI

SPI(Serial Peripheral Interface):,串行外设接口,高速、同步、全双工通信总线

  • SPI总线的4条逻辑线:

MOSI(SOMI/DIN/DI/SDI/SI):master output slave input,主机输出,从机输入(数据来自主机)

MISO(SIMO/DOUT/DO/SDO/SO):master input slave output,主机输入,从机输出

SCLK(SCK):serial clock,串行时钟信号,由主机产生发送给从机

CS(CE/SSEL/CSN/SS):chip select,片选信号,主要用于发送片选CS信号,即选择从设备,由主机发送,通常低电平是有效信号

  • SPI可能有多个设备,但只能有一个主设备,主设备通过SS线控制选择设备。默认情况下,SS线是低电平,主设备通过选择连接在对应SS线下的设备,然后使其发送高电平,当连接在对应SS线上的设备收到高电平时会做出响应,开始接收SDO或SDI的数据。SS线可以有多个,外接多个设备,但SCK、SDO、SDI只有一个,其它设备都接在上面
  • 优点:全双工高速通信;推免输出接口(减少走线分叉,保证在高速传输下信号的完整性);无需上拉电阻,功耗低;外围电路和软件配置简单

缺点:单一主设备;传输距离短,一般仅适合板内传输;缺少硬件级别的错误检查协议;无法内部寻址,多从设备时,需要额外的片选信号线

(七)MIPI

MIPI(Mobile Industry Processor Interface):是MIPI Alliance制订接口标准,旨在把手机内部的接口如摄像头、显示屏接口、射频/基带接口等标准化。不是一个单一的接口或协议,而是包含了一套协议和标准,以满足各种子系统独特的要求。

  • DSI(Display Serial Interface)定义了一个位于处理器和显示模组之间的高速串行接口。
  • CSI(Camera Serial Interface)定义了一个位于处理器和摄像模组之间的高速串行接口。
  • SLIMBUS(Serial Low-power Inter-chip Media Bus):异步2线(DATA和CLK)音频接口,用于连接基带/应用处理器和音频芯片,总线协议保证既能发控制信息,又能发数据信息,从而替换传统的数据和控制两种接口(如I2S和I2C)。

Android底层驱动开发(十一)

(八)USB

USB(Universal Serial BUS):通用串行总线,

四、Linux内核无线子系统

(一)相关术语

MLMEMAC Sublayer Management EntityMAC子层管理实体,管理物理层MAC状态机
FullMAC:使用硬件管理MLME的无线网卡类型。
SoftMAC:使用软件管理MLME的无线网卡类型。SoftMAC设备允许对硬件有更精细的控制,允许通过软件来替硬件完成802.11帧的管理,允许解析和生成802.11无线帧,现在大部分无线设备都是softMAC设备

mac80211:一个无线设备驱动开发框架,驱动开发者可以使用mac80211文章来源地址https://www.toymoban.com/news/detail-459157.html

到了这里,关于Android底层驱动开发(十一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 驱动开发:内核遍历文件或目录

    在笔者前一篇文章 《驱动开发:内核文件读写系列函数》 简单的介绍了内核中如何对文件进行基本的读写操作,本章我们将实现内核下遍历文件或目录这一功能,该功能的实现需要依赖于 ZwQueryDirectoryFile 这个内核API函数来实现,该函数可返回给定文件句柄指定的目录中文件

    2024年02月08日
    浏览(71)
  • 单片机、ARM、嵌入式开发、Android 底层开发有什么关系?

    从我目前的见识来看: 单片机是个系统(比如:51、AVR、PLC...),其中包含了去除了输入输出之外的运算器、控制器、存储器,我们用程序可以非常直观的控制引脚电平的高低。最近很多小伙伴找我,说想要一些ARM的资料,然后我根据自己从业十年经验,熬夜搞了几个通宵,

    2024年02月02日
    浏览(66)
  • USB鼠标驱动开发流程

    USB驱动开发,针对某一个USB设备的某个功能(接口)构建的驱动程序。USB驱动并不直接和USB设备进行数据交互,而是通过USB总线驱动程序(USB Core和USB HCD)来操作USB设备的。一般构建USB设备驱动的流程为: (1) 根据期望适用的USB设备信息构建一个id_table。 (2) 根据需要的数据传

    2024年02月09日
    浏览(37)
  • Harmony鸿蒙南向驱动开发流程

    HDF(Hardware Driver Foundation)驱动框架,为驱动开发者提供驱动框架能力,包括驱动加载、驱动服务管理、驱动消息机制和配置管理。并以组件化驱动模型作为核心设计思路,让驱动开发和部署更加规范,旨在构建统一的驱动架构平台,为驱动开发者提供更精准、更高效的驱动

    2024年04月27日
    浏览(34)
  • Android音频框架之一 详解audioPolicy流程及HAL驱动加载与配置

    android 系统 framework 代码起点, frameworks/base/core/jni/AndroidRuntime.cpp 文件, 此文件是android系统主线程代码,代码内容涉及系统很多模块,此程序主要是注册模块的JNI接口方法。其中涉及到模块 native、sensorHal、media、audioflinger、displayflinger、camera、serialport、binder等, 从各模块名称

    2024年01月22日
    浏览(38)
  • 【Android Gradle 插件】Android Studio 工程 Gradle 构建流程 ② ( settings.gradle 构建脚本分析 | 根目录下 build.gradle 分析 )

    pluginManagement 脚本块 , 用于 配置 Gradle 插件的 Maven 仓库 , 配置的是 构建过程 中 , 使用的仓库 ; dependencyResolutionManagement 脚本块 , 用于 配置 依赖 的 Maven 仓库 , 配置的是 工程 或 模块 下的依赖使用的仓库 ; 在 dependencyResolutionManagement 脚本块 中 定义的 repositoriesMode.set(Repositorie

    2024年02月03日
    浏览(52)
  • 【GPU驱动开发】- GPU架构流程

    不必害怕未知,无需恐惧犯错,做一个Creator! GPU(Graphics Processing Unit,图形处理单元)是一种专门用于处理图形和并行计算的处理器。GPU系统架构通常包括硬件和软件层面的组件。 总体流程: 1. 应用程序请求图形操作: 应用程序通过图形API(如OpenGL、Vulkan)发送图形操作

    2024年02月20日
    浏览(41)
  • 高通平台&MTK平台驱动开发流程

    高通(Qualcomm)是全球领先的无线通信技术解决方案提供商,尤其在移动通信领域有深远的影响。高通的Snapdragon系列处理器广泛应用于智能手机、平板电脑、智能手表等多种设备中。Snapdragon处理器以其优异的性能、高效的能耗比以及强大的图形和视频处理能力而著称。高通平

    2024年04月13日
    浏览(45)
  • 探索嵌入式开发领域:单片机、ARM、Android底层的紧密联系

    作为一个曾编写ARM教程和参与Android产品开发的专家,我发现单片机、ARM、嵌入式开发和Android底层开发之间存在紧密的联系。对于那些希望在嵌入式开发领域发展的人来说,了解这些领域的知识至关重要。为了帮助你更好地学习这些内容,我总结了一些嵌入式资料,你可以在

    2024年02月11日
    浏览(45)
  • Linux驱动开发笔记(一):helloworld驱动源码编写、makefile编写以及驱动编译基本流程

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/130534343 红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中… 上一篇:没有了 下一篇:《Linu

    2024年02月08日
    浏览(65)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包