| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> RockChip U-Boot v2017(next-dev)详解(三) -> 正文阅读 |
|
[嵌入式]RockChip U-Boot v2017(next-dev)详解(三) |
一、驱动模块1、Interrupt1.1、框架支持 U-Boot原生代码没有中断框架,RK自己实现了一套用于支持GICv2/v3,默认使能。 目前用到中断的场景:
配置:
框架代码:
1.2、相关接口
申请IRQ
一共有3种方式申请GPIO的pin脚中断号:
(1)传入
struct gpio_desc结构体
范例:
(2)传入GPIO的phandle和pin
范例(
rk817
的中断引脚为
GPIO0_A7
):
(3)强制指定gpio
范例(GPIO0_A0 申请中断):
2、Clock2.1、框架支持 clock 驱动使用 clk-uclass 框架和标准接口。 配置:
框架代码:
平台驱动代码:
2.2、相关接口
2.3、时钟初始化 一共有三类接口涉及时钟初始化,如下先列出cru节点信息:
(1)第一类,平台基础时钟默认初始化: rkclk_init()
????????各平台cru驱动probe会调用 rkclk_init() 完成
pll/cpu/bus
频率初始化,频率定义在
cru_rkxxx.h
例如RV1109:
(2)第二类,平台基础时钟二次初始化:clk_set_defaults()
????????各平台cru驱动
probe
可能会调用
clk_set_defaults()
解析且配置
cru节点内 assigned-clocks/assigned-
clock
-
parents/assigned
-
clock-rates指定的频率(即重新配置频率),但是不包括
arm
频率。仅当实现
set_armclk_rate()
时才会配置。
????????除了cru
之外,有需求的外设也可以在自己的
probe
里主动调用
clk_set_defaults()
,例如
vop
、 gmac。
(3)第三类,各模块时钟初始化:clk_set_rate()
????????
大部分外设模块都是调用
clk_set_rate()
配置自己的频率。
2.4、CPU提频 cpu开机提频的实现流程:
2.5、时钟树 U-Boot框架没有提供时钟树管理,各平台增加了soc_clk_dump()用于简单打印时钟信息。例如: ?第一行打印的含义:
3、GPIO3.1、框架支持 GPIO 驱动使用 gpio-uclass 框架和标准接口,用户必须通过 struct gpio_desc 才能访问到gpio。 配置:
框架代码:
驱动代码:
3.2、相关接口
注意事项:
dm_gpio_get_value()
的返回值表示
active
状态,而非电平的高或低。例如:
dm_gpio_set_value()
的参数
value
也是同理,
1
:
atcive
,
0
:
inactive
。
4、Pinctrl4.1、框架支持 pinctrl驱动使用pinctrl_uclass框架和标准接口。 配置:
框架代码:
驱动代码:
4.2、相关接口
pinctrl 框架会在各个
driver probe
时又框架自动为其设置
"default"
状态,用户一般不需要调用
pinctrl
接口。
5、I2Ci2c驱动使用i2c-uclass框架和标准接口。 5.1、框架支持 配置:
框架代码:
驱动代码:
5.2、相关接口
6、Display6.1、框架支持 RK U-Boot目前支持的显示接口包括:RGB,LVDS,EDP,MIPI,和HDMI,未来还会加入CVBS,DP等。U-Boot显示logo图片来自kernel根目录下的logo.bmp和logo_kernel.bmp,它们被打包在resource.img里。 对图片的要求:
配置:
框架代码:
驱动文件:
6.2、相关接口
6.3、DTS配置
6.4、LOGO分区 ????????用户如果有动态更新开机LOGO的需求(一般在应用层发起更新),可以通过独立的LOGO分区实现。 操作步骤:
7、Pmic/Regulator7.1、框架支持 PMIC/Regulator驱动使用pmic-uclass、regulator-uclass框架和标准接口。 PMIC支持:
Regulator支持:
配置:
框架代码:
驱动文件:
7.2、相关接口
7.3、init电压
目前有两种方式为某路
regulator
设置初始化电压输出,前提是必须配置
regulator
-
boot
-
on :
7.4、跳过初始化 如果想跳过某路regulator的初始化,可增加 regulator-loader-ignore 。
8、Charge8.1、框架支持 U-Boot原生不支持充电功能,RK自己实现了一套。 充电设计的模块较多:Display,PMIC,电量计,充电动画,pwrkey,len,CPU低功耗休眠,Timer等。 电量计支持:
配置:
充电框架:
充电动画驱动:
电量计框架:
电量计驱动:
逻辑流程:
8.2、打包图片 充电图片位于./tools/images/目录,需要打包进resource.img才能被充电框架显示。 内核编译得到的resource.img默认没打包充电图片,需要在U-Boot里另外单独打包。
打包命令:
打包信息:
成功后会在U-Boot根目录下生成包含图片的resource.img,通过hd命令确认内容:
8.3、DTS配置 DTS充电节点:
8.4、系统休眠 Pwrkey按键:
低功模式有2种,通过 rockchip,system-suspend = <VAL> 选择:
ATF支持低功耗的版本要求: 8.5、更换图片 (1)更换 ./tools/images/ 目录下的图片(采用 8bit 或 24bit bmp),使用命令 ls | sort 确认图片排列顺序是低电量到高电量,使用pack_resource.sh 脚本把图片打包进 resource.img; (2)修改 ./drivers/power/charge_animation.c 里的图片和电量关系;
9、Storage
存储驱动使用标准的存储框架,访问接口对接到
BLK 层用于支持文件系统。目前支持的存储设备:eMMC
、
Nand flash
、
SPI Nand flash
、
SPI Nor flash
,其中
flash
相关的框架如下:
9.1、框架支持 (1)rknand
rknand
是针对大容量
Nand flash
设备所设计的存储驱动,通过
Nandc host
与
Nand flash device 通信,具体适用颗粒选型参考《
RKNandFlashSupportList
》,适用以下颗粒:
配置:
驱动文件:
(2)rkflash rkflash 是针对选用小容量存储的设备所设计的存储驱动,其中 Nand flash 的支持是通过Nand?host 与Nand flash device 通信完成,SPI flash 的支持是通过 SFC host 与 SPI flash devices 通信完成,具体适用颗粒选型参考《RK SpiNor and SLC Nand SupportList》,适用以下颗粒:
配置:
驱动文件:
注意:
(3)MMC&SD
MMC
为多媒体卡,比如
eMMC
;
SD
为是一种基于半导体快闪记忆器的新一代记忆设备。在
rockchip平台,它们共用一个
dw_mmc
控制器(除了
rk3399
,
rk3399pro
)。
配置:
驱动文件:
(4)SLC Nand & SPI Nand & SPI Nor 开源方案 由于开源社区的不断完善及 UBI 文件系统的可行性,RK 也完善 flash 结合较多开源代码的方案,且开源 方案默认选用 pre loader 为 SPL 的启动方案,所以大部分配置都是结合 SPL 相关配置来完成。 配置:
驱动文件:
9.2、相关接口
存储驱动的访问接口都对挂到
BLK
层,所以无论何种存储都通过如下接口访问:
9.3、DTS配置 eMMC配置:
Nandc配置:
SFC配置:
10、Uartserial 使用 serial-uclass.c 框架和标准接口,目前主要是UART debug在使用。 配置:
框架代码:
驱动代码:
10.1、单独更换 单独更换 U-Boot 阶段的UART debug 流程如下(uart2 为例):
10.2、全局更换
Pre-loader serial 是实现前级固件共享
UART debug
配置的机制,这些固件包括:
ddr、
miniloader
、
bl31
、 op-tee、
U-Boot
。原理:由最早阶段的
ddr bin
配置好
UART debug
并且通过
ATAGS
传参机制逐级传递下去,各级固件获取 UART debug
配置进行使用(不包括
kernel
)。
用户可以通过修改 ddr bin
里的串口配置实现
UART debug
的全局替换,步骤:
DDR bin配置
rkbin
仓库里提供了工具给用户配置不同的参数,包括串口更换:
U-Boot配置
(1)使能配置;
(2)
rkxx-u-boot.dtsi
中把使用到的
uart
节点加上属性
“u-boot,dm-pre-reloc;”
;
(3)
aliases
建立
serial
别名,因为
U-Boot
是通过
aliaes
找到目标节点并初始化它的。
例如:
./arch/arm/dts/rk1808-u-boot.dtsi
里为了方便,为所有
uart
都建立别名;
10.3、关闭打印
10.4、相关接口
11、Key11.1、框架支持 U-Boot框架默认没有支持按键功能,RK自己实现了一套按键框架。 实现规则:
配置:
框架代码:
驱动代码:
pwrkey
仅以中断方式被识别,其余
gpio
按键以轮询方式被识别。
11.2、相关接口 接口:
code定义:
返回值:
KEY_PRESS_LONG_DOWN
默认时长
2000ms
,目前只用于
U-Boot
充电的
pwrkey
长按事件。
范例:
12、Vendor StroageVendor Storage 用于存放 SN、MAC 等不需要加密的小数据。数据存放在 NVM(eMMC、NAND 等)的保留分区中,有多个备份,更新数据时数据不丢失,可靠性高。 12.1、原理概述
一共把
vendor
的存储块分成
4
个分区,
vendor0
、
vendor1
、
vendor2
、
vendor3
。每个
vendorX
(
X=0
、1、
2
、
3
)的
hdr
里都有一个单调递增的
version
字段用于表明
vendorX
被更新的时刻点。每次读操作只读取最新的 vendorX
(即
version
最大),写操作的时候会更新
version
并且把整个原有信息和新增信息搬移到 vendorX+1
分区里。例如当前从
vendor2
读取到信息,经过修改后再回写,此时写入的是vendor3。这样做只是为了起到一个简单的安全防护作用。
12.2、框架支持 配置:
驱动文件:
12.3、相关接口
13、Led13.1、框架支持 Led驱动使用led-uclass.c框架和标准接口 配置:
框架代码:
驱动代码:
13.2、相关接口
13.3、DTS节点
U-Boot
的
led_gpio.c
功能相对简单,只解析
led
节点下的
3
个属性:
14、MTD
MTD (Memory Technology Device)
即内存技术设备,支持
nand
、
spi nand
、
spi nor
。
RK
设计了
MTD block 层用于支持
MTD
设备的读写。
14.1、框架支持 U-Boot配置:
SPL配置:
框架代码:
驱动为各个控制器驱动,把读写等接口挂接到
MTD
层。
14.2、相关接口
15、以太网15.1、框架支持 框架代码:
驱动代码:
menuconfig配置: (1)驱动配置
Rockchip
以太网驱动有两套驱动
另外
dwc_eth_qos
驱动需要配置
nocache memory
,参考
RV1126:
(2)cmd配置
15.2、相关接口 (1)数据结构初始化接口
(2)设备注册接口
(3)网络数据读写和phy读写
U-Boot
的数据收发需要主动调用,没有采用中断或轮询方式,具体实现可参照
NetLoop().
15.3、DTS配置
DTS
节点与
kernel
一样,需要关注的是以下板级相关的属性配置:
|
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 8:26:33- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |