| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> imx6ull.Linux4.15平台下开发 记录1(设备树) -> 正文阅读 |
|
[嵌入式]imx6ull.Linux4.15平台下开发 记录1(设备树) |
本连载记录下自己在区域控制站项目中开发点滴,记录1是重温设备树
一、 1.设备树编译:(1)在arch/arm/boot/dts/Makefile?添加目标办编译的dts文件,如:imx6ull-borrow-emmc.dtb(在$(CONFIG_SOC_IMX6ULL)下添加)
2.imx6ull.dtsi描述imx6ull内部外设信息:?
cpu0:cpu@0{
compatible = "arm,cortex-a7";
device_type = "cpu";
};
描述cpu0信息(如主频)
3.节点命名:node-name@unit-address
eg: uart1@寄存器首地址/设备的地址
interrupt-controller@00a01000? ? 或 cpu@0
label:node-name@unit-address: label:节点标签
4.节点值:(1)字符串:compatible = "arm,cortex-a7";
? ? ? ? ? ? ? ? ? (2) 32位无符号证书:reg=<0>;
? ? ? ? ? ? ? ? ? ? ? ? ? ? 数组:reg=<0 0x123456 100>;
? ? ? ? ? ? ? ? ? ? (3)?字符串列表:compatible="fsl,imx6ull"
,"fsl,nandflash";?用“,”分隔
5.标准属性:(1)compatible:设备与驱动绑定 “manufacturer,model”("厂商,驱动名字") , eg:compatible="fsl,imx6ul-evk-wm8960","fsl,imx-audio-8960" ;
? ? ? ? ? ? ? ? ? ? ?先使用第一个兼容值在linux内核查找驱动文件,如没有使用第二个查找,of_device_id保存对应compatible值。
? ? ? ? ? ? ? ? ? ?(2)model属性:描述设备模块信息,比如名字:model = "wm8960-audio";
?? ??? ??? ??? ?? ? (3) status属性:状态相关,“okay”、“disable”、“fail”、“fail-sss”
?? ??? ??? ??? ?? ? (4) #address_cells,#size_cells,用于描述地址,其中#address_cells:地址信息所占字长(32位),#size_cells:reg属性中长度信息所占字长(32位)
?? ??? ??? ??? ??? ?? ? eg:reg=<address1 len1 address2 len2> ,addressx:起始地址:#address-cells , lenx:地址长度:#size-cells
?? ??? ??? ??? ?? ? (5) reg属性:外设的寄存器地址范围信息 eg:reg=<0x02020000 0x4000>
?? ??? ??? ??? ?? ? (6)?ranges属性:<child-bus address parent lenth>,一般为空
?? ??? ??? ??? ??? ?? ? eg: ranges;? ? ? ? ? ?ranges=<0x0 0xe0000000 0x00 100000>;
6.根节点compatible属性: /{compatible="fsl,imx6ull_borrow_emmc","fsl,imx6ull";
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?};? imx6ull_borrow_emmc:使用的设备名,imx6ull:使用的SOC
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 匹配方法:arch/arm/include/asm/mach/arch.h? ? ? ? ? ? ?#define DT_MACHINE_START
7.向节点追加/修改内容:
?eg:追加I2C1: &I2C1{/Z追加的内容};
8.特殊节点:aliases,chosen
? ? ? ? ? ?(1) aliases?与lable功能类似
? ? ? ?(2)chosen:uboot向Linux内核传递参数
9.of函数:include/linux/of.h
?? ?(1)of_find_bode_by_name?通过节点名字查找指定的节点
? ? (2)of_find_node_by_type通过节点属性查找指定的节点
?? ?(3)of_find_compatible_node?根据type,compatible查找节点
? ? (4) of_find_matching_node_and_match通过of_device_id查找节点
? ? (5)of_find_node_by_path通过路径查找节点,比如"/backlight"
二、以led开发举例
1.修改设备树:在"/"下创建“led ”子节点
2.linux内核根文件夹 make dtbs
3.使用新XXX.dtb启动linux内核
4.编写驱动文件:
?? ?(1)获取设备节点,dtslen.nd=of_find_node_by_path("/led");
?? ?(2)获取compatible属性:proper= of_find_property(dtsled.nd,"compatible",NULL);
?? ?(3)获取status属性内容:ret=of_property_read_string(dtsled.nd,"status",&str);
? ? (4)获取属性内容:ret=of_property_read_u32_array(dtsled.nd,"reg",regdata,10);
? ? (5)寄存器ioremap映射
5.编写APP
三、Linux开发分步:1.设备树 2.firmware 3.bsp 4.应用
|
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
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/25 20:18:43- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |