linux驱动基础知识讲解
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(9) LCD模块 使用这个模块,设备能够显示logo或是任何通知的消息。 (10) NAND模块 因为U-Boot也需要从flash读取镜像(比如内核或是ramdisk), 所以有必要在U-Boot中初始化NAND相关的功能。 (11) MSDC模块 支持MSDC启动
一些重要的数据结构
1. 大部分驱动程序涉及三个重要的内核数据结构: • 文件操作file_operations结构体 • 文件对象file结构体 • 索引节点inode结构体
Linux 驱动学习总结汇报
2016年11月12日
内核模块 Bootloder 并发控制 中断处理 设备驱动的结构
Linux内核重要子系统
1. 系统调用接口 2. 进程管理 3. 内存管理 4. 虚拟文件系统 5. 网络堆栈 6. 设备驱动
最简单的嵌入式系统
Bootloader
参数
系统内核
根文件系统
(1) 第1部分bootloader,也就是MTK内部(in-house)的preloader,这部分依赖平台。
(2) 第2部分bootloader,也就是 Little Kernel ,这部分依赖 操作系统,负责引导linux操作系统和Android框架。 源码位置: \vendor\mediatek\proprietary\bootable\bootloader
Flash 从低地址到高地址方向
MTK的Bootloader 在嵌入式操作系统中,BootLoader是在操作系统内 核运行之前运行。可以初始化硬件设备、建立内存空间 映射图,从而将系统的软硬件环境带到一个合适状态, 以便为最终调用操作系统内核准备好正确的环境。 MTK的bootloader有两部分组成:
(4) 内存模块
1) Pre-loader由boot ROM加载和在芯片组内部的SRAM中执行,因 为外部的DRAM还没有初始化。 2) 为了准备软件整个可执行环境,preBaidu Nhomakorabealoader采用内置的内存设置来 初始化DRAM(DRAM is initialized upon pre-loader built-inmemory settigns)。这样,LK就能够被加载到DRAM中并执行。 (5) GPIO模块 (6) PMIC模块 为了提供一些基本的硬件功能,比如控制外设电源,pre-loader初始化 上层模块(upper modules)。 (7) RTC模块 1) 当通过power按键开机后,pre-loader拉高RTC的PWBB来保持设 备一直有电(keep the device alive)和继续引导LK。 2) RTC闹钟(alarm)有可能是设备开机的启动源,对于这种情况,设 备部需要按power按键就可自动启动。
(3) I2C模块 (4) PWM模块 (5) PMIC模块 (6) RTC模块 和计时器模块一样,在U-Boot中,I2C/PMIC/RTC重新复位寄存器来 复位这些模块。 (7) LED模块 通过这power off charging个模块,设备能够通知用户当前的充电状态。
(8) 充电模块 这个模块负责关机充电(power off charging)、低电压充电(lower charging in the system)。
MTK的Bootloader
正常启动的主要工作如下: (1) 设备上电后,Boot ROM开始运行。 (2) BootROM初始化软件堆栈(software stack)、通信端口和可引导存储 设备(比如NAND/EMMC)。
(3) BootROM从存储器中加载pre-loader到内部SRAM(ISRAM)中,因 为这时候还没有初始化外部的DRAM。
(4) BootROM跳转到pre-loader的入口处并执行。
(5) Pre-loader初始化DRAM和加载LK到RAM中。
(6) Pre-loader跳转到LK中并执行,然后LK做一些初始化,比如显示的 初始化等。 (7) LK从存储器中加载引导镜像(boot image),包括linux内核和 ramdisk(Android呢?) (8) LK跳转到linux内核并执行。
MTK的Bootloader
pre-loaders中涉及的硬件部分
(1) PLL模块 1) PLL模块用于调整处理器和外部内存的频率。 2) 在PLL模块初始化后,处理器和外部内存的频率可由 26MHZ/26MHZ增加到1GHZ/192MHZ。 (2) UART模块 1) UART模块用于调试或是META(Mobile Engineering Testing Architecture)模式下的握手。 2) 默认情况下,UART4初始化波特率为9216000bps和用于调试 信息的输出,UART1初始化为115200bps和作为UART META端口。 但也可以使用UART1作为调试或是UART META端口。 (3) 计时器(timer)模块 这是个基本的模块,用来计算硬件模块所需要的延时或是超时时间。
(8) USB模块 当USB线插入时,它初始化来和外部工具通信,比如用于升级 系统的下载工具或是META模式触发器的META工具。 (9) NAND模块 (10) MSDC模块 Pre-loader可以从NAND flash或是EMMC中加载LK,这两者只 能选择其中一种来启动。
LK中涉及的硬件部分
LK是第2个loader,它由pre-loader引导并执行。从根本上来说 (basically),pre-loader已经初始化了相关的硬件模块,而不需要 在LK中重新配置这些模块了。但一些模块在LK中被重新复位来 配置硬件寄存器,这样可创造一个干净的环境。比如计时器模块, 在LK中,计时器重新复位清零硬件计数来对计时进行复位。所 有在LK中需要初始化的列在下面: (1) 计时器模块 通过复位硬件寄存器来复位计时。 (2) 串口模块 LK采用串口模块来配置它的输入/输出系统,在这个模块初始化 后,我们可以使用LK提供的“printf(…)”等函数来使用串口功能。