sd卡详细资料

2023-11-13

1、简介  

SD卡是基于flash的存储卡。 
SD卡和MMC卡的区别在于初始化过程不同。 
SD卡的通信协议包括SD总线和SPI两类。 
SD卡使用卡内智能控制模块进行FLASH操作控制,包括协议、安全算法、数据存取、ECC算法、缺陷处理和分析、电源管理、时钟管理。
通信电压范围:2.0-3.6V;工作电压范围:2.0-3.6V
最大读写速率:10Mbyte/s  
最大10 个堆叠的卡(20MHz,Vcc=2.7-3.6V)
 
 
2:卡类型
MMC卡: MultiMedia card,有 7 个触点( 引脚),分为两种操作模式,分别为 MMC模式与SPI 模式,两种模式对引脚的定义是不同的。SPI 模式只有 Host 具有SPI 接口时才能使用。MMC只具有存储功能,不像SD卡还具有加密功能。
SD卡: Security Digtial card,共有9 个触点( 引脚),多余的 2 个引脚为 数据线,但使用与 MMC卡兼容的模式时,这两个多余的引脚没有起到作用。SD卡除了存储功能外,还有一种加密功能,但加密功能是收费的(所以开源的linux中只包含mmc的驱动目录),因为当初SD卡联盟中(索尼)就是发明这种卡就是用来存储音乐(淘汰卡带),并使用加密特性,防止拷贝。

TF卡:软件上SD卡一致,只是在硬件的体积上比SD卡西小,所以市场上很多的TF卡的SD外形卡套
SDIO卡: 这种卡并不是存储卡,可以理解为一个SDIO接口卡,如WIFI(SDIO接口);并非memory卡,故名思意,
就是输入/ 输出卡,这种卡有用于 LAN的、也有用于蓝牙的。

3、SD卡协议

1.x:小于2GB的卡(但通过相关的软件,可以模拟实现大于2GB)

2.0: 2<SD卡<32 GB

3.0: >32GB

4、SD卡通信接口

SD卡有9个pin:1个VDD,2个VSS(GND),CLK,CMD,DATA0-DATA3, 【DATA3可以作为卡检测脚】

SD卡可以使用SD总线接口,也可以使用SPI通信接口;

SD总线接口描述:

CMD:Command is a bi-directional signal. (Host and card drivers are operating in push pull mode.) 【命令与响应都是走这条线】

DAT0-3:Data lines are bi-directional signals. (Host and card drivers are operating in push pull mode.) 【真正的数据走这几条线,数据位是可以配置:1~4】

CLK:Clock is a host to cards signal. (CLK operates in push pull mode.) 

VDD:VDD is the power supply line for all cards. 

VSS[1:2]:VSS are two ground lines. 

SPI接口描述:

CS:Host to card Chip Select signal.

CLK:Host to card clock signal. 

DataIn:Host to card data signal. 

DataOut:Card to host data signal. 

5、SD卡内部结构

Each  card has a set of information registers 
The RCA register is not available in SPI Mode. 
OCR: 卡操作电压寄存器 32位, 只读,每隔0.1V占1位, 第31位卡上电过程是否完成
CID: 卡身份识别寄存器 128bit,只读, 厂家号,产品号,串号,生产日期
SCR: 卡配置寄存器, 可写的 64bit 是否用Security特性(LINUX不支持),以及数据位宽(1bit或4bit)
RCA: 卡地址 寄存器: 可写的 16bit SD host和卡进行协商的一个地址,内核中会在代码里面记录这个地址,卡这         边则写到RCA寄存器
CSD: 卡专有数据寄存器 部分可读写 128bit, 卡容量,最大传输速率,读写操作的最大电流、电压,读写擦出块的最大长度等
 
The host may reset the cards by switching the power supply off and on again. The card has its own power-on  detection circuitry which puts the  card into an idle state after the power-on. The card can also be reset by sending  the GO_IDLE (CMD0) command.
 
5、SD卡上电过程

上电初始化需要1ms或者74 CLOCK(SD卡的clock,400KHZ)两者大致,SD卡的电压上到2.0V,SD卡开始工作,此时支持的命令非常有限(其中最主要支持ACMD41命令,sd host问卡的操作电压时多少? 卡就会从它的OCR寄存器里面读出SD卡出厂就烧录在里面的卡的操作电压值返回给sd host),当电压调整到它要求的VDD时候(SD卡的工作电压在2.7~3.6V,常见3.3V),同时SD的CLK从400KHZ调整到更高频率(比如25MHZ),这时卡就完全正常的工作了。接下来可以去获取卡的生产厂家,容量等信息。

6、SD卡的命令和响应以及数据传送的格式
MMC/SD通过发命令的方式来实现卡的初始化和数据访问
卡寻址通过会话地址方式实现,地址在初始化的时候分配给卡。SD 总线上 
的基本操作是command/response。 
 
数据传送采用块方式,数据块后接CRC 校验位,操作包括单数据块和多数据
块。多数据块更适合快速写操作,多数据块传输当在 CMD 线出现停止命令时结束。 
数据传输可以在主机端设置采用单数据线或多数据线方式。 
 
块写操作在DAT0 数据线写操作期间使用忙信号,无论用来传输的信号线数
 
目是多少。
命令:通过CMD线
 
响应:通过CMD线
数据:通过4条数据线

最多支持64个命令: CMD0~CMD63,(其中CMD57~63是保留的)
ACMD: Application Sepcific command:
ACMD41 =cmd55 + cmd41,组合命令,CMD55是前导命令,提醒卡后面的CMD41是一个特殊的命令
命令的类型

广播命令(bc,bcr)——广播命令发送给所有SD卡,有些命令需要响应。 

寻址(点对点)命令

(ac,adtc)

 

——

 

寻址命令只发送给具有相应地址的卡,并

 

需要从卡返回一个响应。

Broadcast Commands ( bc), no response
The broadcast feature is applicable only if all the CMD lines are connected together in the host. If they are separated then each card will accept it separately on his turn.
Broadcast Commands with Response (bcr )
response from all cards simultaneously. Since there is no  Open Drain mode in SD Card, this type of command is used only if all the CMD lines are separated. The command will be accepted and responded to by every card separately.
Addressed (point-to-point) Commands (ac )
no data transfer on DAT.
Addressed (point-to-point) Data Transfer Commands (adtc)
data transfer on DAT .
响应:
R1 (standard response): response length 48 bit
R1b is identical to R1 with an optional busy signal transmitted on the data line
R2 (CID, CSD register): response length 136 bits.  The content of the CID register is sent as a response to CMD2 and CMD10. The content of the CSD register is sent as a response to CMD9.
R3 (OCR register): response length 48 bits.  The contents of the OCR register are sent as a response to ACMD41.
R4~R5:  responses are not supported.
R6: (Published RCA response): code length 48-bit, response to CMD3
7、SD卡的状态
 
8、SD卡的操作模式
对卡而言也有两类操作:
卡识别模式——在重置(reset)后当主机查找总线上的新卡时,处
 
于卡识别模式。重置后SD卡将始终处于该模式,直到收到
 
SEND_RCA命令(CMD3)。 
数据传输模式—一旦卡的REC发布后,将进入 数据传输模式。主机一旦识别了所有总线上的卡后,将进入数据传输模式。 
卡识别模式

     GO_IDLE_STATE(CMD0)是软件重置命令,设置每个SD卡进入Idle状态。处于Inactive状态的卡不受此命令影响。主机上电后,所有SD卡进入Idle状态,包括处于Inactive状态的卡。至少74个时钟周期后才能开始总线传输。上电或CMD0(重置)后,所有SD卡的命令线处于输入模式,等待下一个命令的起始位。卡通过一个默认的相对卡地址RCA(RCA=0x0000)和默认驱动 寄存器设置(最低速,最高驱动电流)初始化。
     SD的物理规范标准要求所有SD卡能通过最小和最大供电电压间的任何电压和主机建立通信。然而,数据传输时的最小和最大电压值在操作条件 寄存器OCR中定义,可能并不能覆盖所有的电压范围。SD卡主机希望通过读取卡的OCR寄存器获取合适的电压值或弹出卡。
      在识别时钟速率fOD下主机开始卡识别过程。SD卡的CMD线输出驱动是push-pull驱动。  总线激活后,主机要求卡发送它们的有效操作条件(ACMD41 preceding with  APP_CMD—CMD55 with RCA=0x0000)。ACMD41命令的响应是卡的操作条件寄存器。相同的命令将发送给系统中所有的卡。不兼容的卡将进入Inactive状态。 主机然后发送命令ALL_SEND_CID(CMD2)到每个卡以获取每个卡的唯一标识CID号。未识别的卡通过CMD线发送CID号作为响应。当卡发送CID号后,进入识别状态(Identification State)。此后,主机发送CMD3(SEND_RELATIVE_ADDR)要求卡发布一个新的相对卡地址RCA,地址比CID短,在以后的 数据传输模式中用来 寻址卡。一旦获得RCA后,卡状态变成就绪状态(Stand-by state)。此时,如果主机要求卡换成其他的RCA号,可以通过发送另一个SEND_RELATIVE_ADDR命令给卡,要求发布一个新的RCA,最后发布的RCA是实际使用的RCA。主机对系统中的每个卡重复识别过程。  所有的SD卡初始化完以后,系统将开始初始化MMC卡(如果有的话),使用MMC卡的CMD2和CMD3。
                                      数据传输模式
   直到主机知道所有CSD寄存器的内容,fpp 时钟速率必须保持在fOD,因为 
一些卡有操作频率限制。主机发送SEND_CSD(CMD9)获取卡定义数据(Card 
 Specific Data,CSD 寄存器),如块大小、卡存储容量、最大时钟速率等。 
       CMD7用来选择一个卡并将它置于传输状态(Transfer state),在任何时间只能有一个卡处于传输状态。如果已有一个卡处于传输状态,它和主机的连接将释放,并返回到Stand-by状态。
      当CMD7以保留相对地址“0x0000”发送时,所有卡将返回到Stand-by状态。这可以用来识别新的卡而不重置其他已注册的卡。在这种状态下已有一个RCA地址的卡不响应识别命令(ACMD41,CMD2,CMD3)。 
     注意:当卡接收到一个带有不匹配RCA的CMD7时,卡将取消选中。在公用CMD线时,选中一个卡时将自动不选中其他卡。
     因此,在SD卡系统中,主机具有如下功能:
            初始化完成后,在公用CMD线时,不选中卡是自动完成的。
            如果使用单独的CMD线,需要关注不选中卡的操作
     主机和选择的SD卡之间的所有数据通信是点对点的方式。所有 寻址命令都需要响应。 
     不同数据传输模式的关系如图4-8所示,使用如下步骤: 
     所有读数据命令可以在任何时候通过停止命令(stop command,CMD12)中止。 数据传输将中止,卡回到传输状态(Transfer State)。读命令有:块读命令(CMD17),多块读命令(CMD18),发送读保护(CMD30),
发送scr(ACMD51),以及读模式的通用命令(CMD56)。 
     所有写数据命令可以在任何时候通过停止命令(stop command,CMD12)中止。在不选中卡命令CMD7前写命令必须停止。写命令有:块写命令  (CMD24 and CMD25),   写CID (CMD26), 写CSD(CMD27), lock/unlock 
命令(CMD42) 以及写模式通用命令(CMD56)。 
     一旦数据传输完成,卡将退出数据写状态并进入Programming State(传输成功)或Transfer State(传输失败)。 
     如果一个快写操作停止,而且最后一块块长度和CRC是有效的,那么数据可以被操作(programmed)。 
     卡可能提供块写缓冲。这意味着在前一块数据被操作时,下一块数据可以传送给卡。如果所有卡写缓冲已满,只要卡在Programming State,DAT0将保持低电平(BUSY)。 
     写CSD、CID、写保护和擦除时没有缓冲。这表明在卡因这些命令而处于忙时,不再接收其他 数据传输命令。在卡忙时DAT0保持低电平,并处于Programming State。实际上如果CMD和DAT0线分离,而且 主机占有的忙DAT0线和其他DAT0线分开,那么在卡忙时,主机可以访问其他卡。 
     在卡被编程(programming)时,禁止参数设置命令。参数设置命令包括:设置块长度(CMD16),擦除块开始(CMD32)和擦除块结束(CMD33)。 
     卡在操作时不允许读命令。 
     使用CMD7指令把另一个卡从Stand-by状态转移到Transfer状态不会中止擦除和编程(programming)操作。卡将切换到Disconnect状态并释放DAT线。 
     使用CMD7指令可以不选中处于Disconnect状态的卡。卡将进入Programming状态,重新激活忙指示。 
     使用CMD0或CMD15重置卡将中止所有挂起和活动的 编程(programming)操作。这可能会破坏卡上的数据内容,需要主机保证避免这样的操作。
9、SD卡是否选择宽总线选择
     宽总线(4位总线宽度)操作模式通过ACMD6选择和不选择。在上电后或GO_IDLE(CMD0)命令后默认的总线宽度是1位。ACMD6命令只在“tran state”有效,即只有在卡选中后(CMD7)总线宽度才能修改。
 
10、SD卡读数据格式
    DAT总线在没有 数据传输时处于高电平。一个传输数据块包含一个起始位(LOW),接着连续的数据流。数据流包含有效数据(如果使用了ECC了还包括错误纠正位)。数据流以一个结束位(HIGH)结束。数据传输和时钟信号同步。 
   以块传输的有效数据包含CRC校验和。产生多项式是标准CCITT 多项式。  采用了缩短的BCH码,d=4,有效数据长度最长为2048字节。CRC校验和对每个DAT线单独计算并附加在每个数据块后。在宽总线模式操作
(DAT0-DAT3)中,16位的CRC校验对每个DAT分别计算。 
   数据块读:  传输的基本单位是数据块,最大尺寸在CSD中定义(READ_BL_LEN)。 开始和结束地址完全包含在一个物理数据快(如READ_BL_LEN定义)中的较 小的块也可以传递。CRC附加在每个数据块的尾部用来保证数据传输的完整性。 CMD17(READ_SINGLE_BLOCK)开始一个块读操作,然后传输完成后进入 Transfer状态。CMD18(READ_MULTIPLE_BLOCK)开始连续的块传输,直到停 止命令。停止命令有一个执行延迟。在停止命令最后一位发送完以后数据传输 止。  如果主机使用累计长度不是块对齐的部分块,在第一个不对齐块的开始,卡 会发现一个块未对齐错误,在状态寄存器中设置ADDRESS_ERR错误,中止传 输并等待(在Data状态)停止命令。
11、SD卡写数据格式
 
数据写传输格式类似于读格式。对于以块为单位的写数据传输,CRC检验
位附加到每个数据块。卡的每根数据线在接收到数据并在写操作前,执行CRC
校验。 
数据块写 
数据块写(CMD24-27,42,56(W)),一个或多个数据块从主机发送给卡,主机
在每个数据块后附加CRC校验。数据块长度WRITE_BL_LEN(512B)。如果
CRC校验失败,卡将在DAT 数据线上指示错误。传输的数据将被抛弃,而且后
续传输的数据块(在多数据块写模式)也都会被忽略。 
多数据块写命令比连续的单数据块写命令速度快。不允许部分块写(小于
512B)。 
主机试图在写保护区域写数据时写操作将中止。在这种情况下,卡在状态
寄存器设置WP_VIOLATION位,并忽略所有后续 数据传输,并在Receive-data
状态下等待停止命令。 
对CID和CSD寄存器进行编程操作不需要实现设置块长度,传输的数据也
是CRC保护的。如果CSD或CID寄存器一部分存储于ROM中,那么不可改变
部分必须和接收缓冲中的相应部分内容保持一致。如果匹配失败,卡将报告一个
错误,而且不改变任何 寄存器内容。 
接收到一个数据块并完成CRC校验后,卡将开始写,如果写缓冲满而且不
能从一个新的WRITE_BLOCK命令接收新数据时,   DAT0 线保持为低电平。任
何时候主机都可以通过SEND_STATUS(CMD13)命令获取卡的状态。状态位
READY_FOR_DATA指示卡是否可以接收新数据或写操作还在进行中。主机通
过CMD7(选中另一个卡)不选中卡,这个操作可以把卡的状态编程Disconnect
并释放DAT线而不中断写操作。当不选中卡时,如果 编程还在进行而且写缓冲
不可用时,将通过下拉DAT为低电平来重新激活忙信号。实际上,主机通过
interleaving可以实现多个卡同时写操作,interleaving过程可以通过在卡忙时访问
其他卡实现。 
预擦除设置优先于多数据块写操作 
设置多个写数据块的预擦除(ACMD23)可以使得接下来的多个数据块写操
作比没有预先执行ACMD23的相同操作更快。主机可以通过该命令设置多少个
数据块将在接下来的写操作中发送。如果在所有数据块发送给卡时中止了写操作
(使用停止传输命令),残余写数据块的内容(指要写入新内容的数据块?)将变
得不确定(可能已擦除或还是原来的数据)。如果 主机发送了超过ACMD23中
定义的数据块数目的数据,卡将逐个擦除数据块(在收到新数据时)。多数据块
写操作完成后值将重新设置为默认值1。 
建议在CMD25命令前使用该命令以加速写操作。如果需要预擦除主机在写
命令前发送ACMD23。如果不发送ACMD23命令,设置的预擦除数将在其他指
令执行时自动清除。 
发送写数据块数目 
系统使用管道机制进行数据缓冲管理,有时候在多数据块写操作过程中发生
错误,使得无法确定哪一个数据块是最后成功写入的数据块。卡可以把正常写入
的数据块数(the number of well-written blocks)作为对命令ACMD22的响应。 
擦除 
同时擦除多个写数据块可以提高数据吞吐量。通过
ERASE_WR_BLK_START(CMD32)和ERASE_WR_BLK_END(CMD33)实现写
数据块的识别。 
主机必须严格按照下列的命令操作顺序:ERASE_WR_BLK_START,
RASE_WR_BLK_END,and ERASE (CMD38)。 
如果不按顺序接收到擦除指令(CMD38)或地址设置指令(CMD32,33),
卡将在状态寄存器中设置ERASE_SEQ_ERROR位,并重置整个顺序(sequence)。 
如果接收到一个不顺序的命令(除了SEND_STATUS),卡将在状态寄存
器设置ERASE_RESET状态位,重置擦除顺序和执行最后的命令。 
如果擦除范围包括写保护扇区,将不被擦除,擦除命令只擦除无保护的扇区。
状态 寄存器的WP_ERASE_SKIP位将设置。 
地址设置命令中的地址是以字节为单位的块写地址。卡将忽略所有小于
WRITE_BLK_LEN(CSD)LSB(最低有效位)。 
如上所述的块写操作,卡通过保持DAT0为低电平指示擦除操作正在进行中。
实际的擦除操作时间可能会很长,主机可以通过CMD7不选中卡或执行卡断开
操作。 
卡上擦除操作后的数据为“0”或“1”,由卡制造商确定。SCR寄存器的
DATA_STAT_AFTER_ERASE(bit55)定义了是“0”或“1”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sd卡详细资料 的相关文章

  • Android中LCD背光驱动

    分类 Linux驱动 Android系统 2013 06 17 16 28 287人阅读 评论 0 收藏 举报 目录 Android的Setting Android的背光JNI层 Android的背光HAL层 Linux的背光内核层 Lin
  • 【003 中断】tasklet和workqueue的区别和底层实现的区别

    一 tasklet和workqueue的区别和底层实现的区别 1 softirq和tasklet都属于软中断 tasklet是softirq的特殊实现 workqueue是普通的工作队列 2 tasklet和workqueue 两者都是中断
  • Linux下开发怎样才算入门了?

    记得大学学单片机的时候 也很想知道自己到底学的怎样了 到了什么水平 到处问人单片机开发怎么才算入门了 最后老师跟我说 能做一个万年历出来就算入门了 于是用单片机控制显示器做一个万年历就成了我的目标 通过按键进行日期设置与时间调整 能区分闰年
  • 内存分配---kmalloc

    kmalloc 内存分配引擎是一个功能强大的工具 下面我们来讲解一下这个函数 Kmalloc 函数分配内存时有几个特点 1 获取内存空间时不会对内存空间进行清零 也就是说 分配给它的区域仍然保持着原有的数据 2 它分配的区域在物理内存中也是
  • GDB调试器常用命令

    1 l命令 list 列出所有程序源码 2 b命令 break 用于设置断点 break main 表示在 main 函数处设置断点 break 11 在第 11 行设置断点 3 c命令用于运行到断点处 输入 c 命令程序就会运行 直到下一
  • 【RK3399】I3399烧写Debian系统详解

    00 目录 文章目录 00 目录 01 驱动安装 02 镜像文件烧写 03 问题讨论 04 附录 01 驱动安装 1 1 没有安装驱动的时候 显示感叹号 1 2 解压DriverAssitant v5 1 1 zip 1 3 双击Drive
  • BootLoader简介——linux内核的引导

    1 BootLoader 在CPU上电启动时 一般连内存控制器都没有初始化过 根本无法在主存中运行程序 更不可能处在Linux内核启动环境中 为了初始化CPU及其他外设 使得Linux内核可以在系统主存中运行 并让系统符合Lintix内核启
  • linux驱动之ioctl详解

    何为ioctl 在linux对文件IO 有打开 读写 关闭 定位等命令 如果需要一些自定义的命令来操作我们写的驱动 ioctl便是传入这些自定义命令的函数 先看看在应用层的函数原型 int ioctl int fd unsigned lon
  • linux tasklet 的分析与使用

    linux tasklet 的分析与使用 目录 linux tasklet 的分析与使用 tasklet 源码分析 tasklet shedule 调度的分析 tasklet 执行 tasklet 使用简单示例 结论 tasklet 是利用
  • Linux驱动

    一 前言 设备树是每一个Linux驱动工程师都必须掌握的一个知识点 有很多之前做单片机的朋友刚接触Linux驱动时 会一脸懵 其实设备树的使用并没有大家想像的那么复杂 对于大部分工程师来说 只要会修改即可 很多粉丝留言说 希望彭老师提供一个
  • 段错误(核心已转储)问题的分析方法

    问题现象 今天在研究linux kernel中typedef的用法时 写了一个程序test typedef c 内容如下 include
  • 17_LinuxLCD驱动

    目录 Framebuffer设备 LCD驱动简析 LCD驱动程序编写 LCD屏幕参数节点信息修改 LCD 屏幕背光节点信息 使能Linux logo显示 设置LCD作为终端控制台 Framebuffer设备 先来回顾一下裸机的时候LCD驱动
  • Linux驱动开发(应用程序如何调用驱动)

    1 添加读写接口 1 在应用代码中 2 在驱动代码中 2 应用和驱动之间的数据交换 1 copy from user 用来将数据从用户空间复制到内核空间 2 copy to user 用来将数据从内核空间复制到用户空间 3 write和re
  • Linux驱动

    HC SR04超声波模块 工作原理参考 超声波模块 star air的博客 CSDN博客 超声波模块 https blog csdn net qq 41262681 article details 95940707 使用超声波测距的操作步骤
  • linux驱动笔试题总结

    linux驱动笔试题总结 试题取之于网络 用之于民 最近在学习linux驱动 驱动开发在笔试的时候考的知识点是有规律可循的 并且这些面点也是平时驱动工作中的理论指导 深刻的理解这些面点还是很有必要的 所以在此总结记录 相信会用到的 ps 以
  • 鸿蒙2.0都来了,一起把环境搭建起来!

    自4月底开始 鸿蒙2 0系统便迎来公测 6月2日将举行鸿蒙操作系统以及华为全场景新品发布会 届时会正式推出鸿蒙OS稳定版 针对华为发布的鸿蒙系统 网上评论褒贬不一 有吹捧的 有无脑黑的 在这里一口君就不做评价了 但是有2点 对任何一个新兴事
  • 十九、Linux驱动之虚拟网卡驱动

    1 基本概念 网络设备是完成用户数据包在网络媒介上发送和接收的设备 它将上层协议传递下来的数据包以特定的媒介访问控制方式进行发送 并将接收到的数据包传递给上层协议 与字符设备和块设备不同 网络设备并不对应于 dev目录下的文件 应用程序最终
  • sd卡详细资料

    1 简介 SD卡是基于flash的存储卡 SD卡和MMC卡的区别在于初始化过程不同 SD卡的通信协议包括SD总线和SPI两类 SD卡使用卡内智能控制模块进行FLASH操作控制 包括协议 安全算法 数据存取 ECC算法 缺陷处理和分析 电源管
  • 【内核驱动】Linux概述

    00 目录 文章目录 00 目录 01 Unix简介 02 Linux简介 03 Linux发展史 04 单内核与微内核区别 05 Linux内核 06 Linux内核组成 07 Linux官方网站 08 附录 01 Unix简介 UNIX
  • 最全的交叉编译Makefile讲解

    最近正在搞交叉编译 参考很多博客 学习了一下Makefile的编写 记录一下Makefile内代码是什么意思 代码如下 简单的hello ko的makefile ifneq KERNELRELEASE obj m hello o else

随机推荐

  • 【C++】基本数据类型

    C 基本数据类型是程序中最基本的数据类型 它们是构建复杂数据类型的基础 C 中的基本数据类型包括整型 浮点型 字符型和布尔型等 目录 基本数据类型 整型 浮点型 字符型 转义字符 字符串 布尔类型 sizeof 基本数据类型 整型 作用 用
  • 算法学习笔记——动态规划:不连续取值的前提下求最大总和

    LeetCode 198 打家劫舍 一排房屋 某房屋内的金额数为nums i 相邻房屋内的钱不能被同时取出 求最多能取出多少钱 nums 1 1 3 4 返回5 选择取出1 4 5 dp i 代表对于0 i号房屋 能取走的最大金额 依次考虑
  • python高级7.多任务--协程-迭代器

    迭代器 迭代是访问集合元素的一种方式 迭代器是一个可以记住遍历的位置的对象 迭代器对象从集合的第一个元素开始访问 直到所有的元素被访问完结束 迭代器只能往前不会后退 可迭代对象 iterable object 我们已经知道可以对list t
  • define()和defined()

    define 用来定义一个常量 define IN ADMIN true 定义一个IN ADMIN常量 defined 用来检测定义的常量是否存在 defined IN ADMIN 检测IN ADMIN是否存在 用处很大 比如你在一个页面上
  • 【数据库 Mysql查询系列】在sc表 中查询平均成绩高于75分的学生。

    和之前发的博文中涉及到的sc 表一样 本文不再展示表内容 直接上代码 select sno 学号 avg ifnull grade 0 平均成绩 from sc group by sno having avg ifnull grade 0
  • vue封装axios实现

    axios很多前端都应该是非常熟悉了 前端访问后端很多都是使用的它 今天我们使用vue来封装一个axios 首页我们新建一个request js文件并引入axios的依赖 import axios from axios 接着创建axios的
  • 熵的概念理解

    Author 修远 说明 本文为Datawhale下开源项目 李宏毅机器学习 决策树的补充内容 作者水平有限 还望学习者批评指正 Datawhale 学习目标 学习信息量计算 原理 学习信息熵 证明 0 H p
  • Pandas数据处理3:数据合并(join、merge),累计与分组(groupby)

    Pandas数据合并 join merge 累计与分组 groupby import pandas as pd import numpy as np def make df cols ind 一个简单的DataFrame data c st
  • 多维时序

    多维时序 MATLAB实现SCNGO CNN Attention多变量时间序列预测 目录 多维时序 MATLAB实现SCNGO CNN Attention多变量时间序列预测 预测效果 基本介绍 程序设计 参考资料 预测效果 基本介绍 1 S
  • Pretues和Keil使用stm32F103C6芯片实现跑马灯

    一 Protues创建工程 添加好名称 不断下一步就行 二 pretues添加原件 构建电路图 二 keil做代码 添加文件这里不做说明 注意一下几个点 1 芯片使用stm32F103c6 2 mdk的汇编文件随之改变 3 宏定义改成stm
  • 【NLP】使用 LSTM 和Beam Search进行文本自动完成

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • 获取腾讯视频的视频url

    爬视频喽 1 获取链接地址 如下图 类似 https v qq com x page q0900ebm4qz html 2 取值 取上图获取到的加粗的数据 然后替换下面链接中的加粗数据http vv video qq com getinfo
  • 记一次python3 pip 报错Retrying

    错误信息如下 Retrying Retry total 4 connect None read None redirect None status None after connection broken by SSLError Can t
  • Nginx超详细入门教程

    目录 一 nginx配置文件介绍 二 nginx的核心功能 1 反向代理 lt 1 gt 正向代理 lt 2 gt 反向代理 lt 3 gt 准备工作 2 负载均衡 3 负载均衡策略 4 动静分离 三 Nginx的高可用性 1 准备两台虚拟
  • Qt控件使用方法技巧合集

    Qt控件使用方法技巧合集 本篇博客代码示例包含C 版本和Python版本 不管是哪个版本 Qt的API都是一样的 使用方式大同小异 文章目录 Qt控件使用方法技巧合集 1 QTextEdit设置背景色和文本颜色 2 QMessageBox的
  • GBK转成utf-8,java实现及讲解,androidstudio学习

    好吧 看来问的人和回答的人都不一定清楚什么是 编码和编码格式 以及如何理解 java中字符串的编码 首先明确几点 unicode是一种 编码 所谓编码就是一个编号 数字 到字符的一种映射关系 就仅仅是一种一对一的映射而已 可以理解成一个很大
  • 连接SqlServer数据库报错version TLS10 is not accepted by client preferences [TLS12,TLS13]

    报错内容 我的报错信息如下 其他类似的可能也好使 你们可以试试 The server selected protocol version TLS10 is not accepted by client preferences TLS12 T
  • 程序员进阶攻略-笔记-021~030

    信息 过载与有效 忙碌 充实而疲倦 的虚幻假象 在这个信息过载的洪流中 需要的就是在这股洪流中筛选信息并建立自己中流砥柱般的 知识磐石 心智 这两个字合在一起是一个意思 分开为 心 和 智 两个字又可以分别解释为 心 是你对需要的选择 从心
  • 八款国产操作系统

    点击上方蓝字 快速关注 目前世界上存在的那些操作系统 Windows MAC OS X MVX DOS VSE UNIX Linux等 很少见到国产操作系统的影子 你知道国产操作系统有那些吗 虽然国内的操作系统我们可能用不上 但我们有足够的
  • sd卡详细资料

    1 简介 SD卡是基于flash的存储卡 SD卡和MMC卡的区别在于初始化过程不同 SD卡的通信协议包括SD总线和SPI两类 SD卡使用卡内智能控制模块进行FLASH操作控制 包括协议 安全算法 数据存取 ECC算法 缺陷处理和分析 电源管