设备树(DTS)的引入减少了内核为支持新硬件而需要的改变,提高代码重用,使得单个内核镜像能支持多个系统。
    DTS作为U-Boot 和Linux 内核之间的动态接口,能够有效减少重复配置,共享于U-Boot 和Linux之间。本文将简单介绍U-Boot使用DTS控制LED的例子:    
    1.在kernel/arch/arm/boot/dts/rk3288-box.dts中添加LED配置:

------------------- kernel/arch/arm/boot/dts/rk3288-box.dts -------------------
index e102714..80928ba 100755
@@ -137,6 +136,16 @@
rockchip,remote_wakeup;
rockchip,usb_irq_wakeup;
};
+
+ leds {
+ compatible = "gpio-leds";
+ power {
+ label = "tchip:blue:power";
+ default-state = "on";
+ gpios = <&gpio8 GPIO_A3 GPIO_ACTIVE_LOW>;
+ };
+ };
};

&gmac {

以上是linux标准的GPIO-LED配置,直接配置上内核就可使用LED。

2.修改U-Boot,以支持读取DTS配置并操作LED灯,修改u-boot/board/rockchip/rk32xx/rk32xx.c:

-------------------- u-boot/board/rockchip/rk32xx/rk32xx.c --------------------
index bfdcf0e..29fff0f 100755
@@ -61,12 +61,34 @@ void board_lmb_reserve(struct lmb *lmb) {
//reserve 48M for kernel & 8M for nand api.
lmb_reserve(lmb, gd->bd->bi_dram[0].start, CONFIG_LMB_RESERVE_SIZE);
}
+
+static struct fdt_gpio_state power_led_gpio;
+int power_led_parse_dt(const void *blob)
+{
+ int led_node = 0;
+ int node = 0;
+
+ node = fdt_node_offset_by_compatible(blob,
+ 0, "gpio-leds");
+ if (node < 0) {
+ printf("can't find dts node for led\n");
+ return -ENODEV;
+ }
+ led_node = fdt_subnode_offset(blob, node, "power");
+ fdtdec_decode_gpio(blob, led_node, "gpios", &power_led_gpio);
+
power_led_gpio.gpio = rk_gpio_base_to_bank(power_led_gpio.gpio &
RK_GPIO_BANK_MASK) | (power_led_gpio.gpio & RK_GPIO_PIN_MASK);
+ power_led_gpio.flags = !(power_led_gpio.flags & OF_GPIO_ACTIVE_LOW);
+ debug("power_led_gpio: %s,%d-%d\n", power_led_gpio.name, power_led_gpio.gpio, power_led_gpio.flags);
+
+ return 0;
+}
#endif /* CONFIG_OF_LIBFDT */

#ifdef CONFIG_RK_FB

#ifdef CONFIG_OF_LIBFDT
+
static struct fdt_gpio_state lcd_en_gpio, lcd_cs_gpio;
static int lcd_en_delay, lcd_cs_delay;
static int lcd_node = 0;
@@ -114,7 +136,6 @@ void rk_backlight_ctrl(int brightness)

void rk_fb_init(unsigned int onoff)
{
-
#ifdef CONFIG_OF_LIBFDT
if (lcd_node == 0) rk_lcd_parse_dt(gd->fdt_blob);

@@ -178,6 +199,17 @@ void init_panel_info(vidinfo_t *vid)
vid->logo_rgb_mode = RGB565;
}

+void power_led_init(void)
+{
+ printf("Enter power_led_init\n");
+#ifdef CONFIG_OF_LIBFDT
+ power_led_parse_dt(gd->fdt_blob);
+ if (power_led_gpio.name!=NULL)
+ {
+ gpio_direction_output(power_led_gpio.gpio, power_led_gpio.flags);
+ }
+#endif
+}

#ifdef CONFIG_RK616
int rk616_power_on(void)
@@ -259,6 +291,9 @@ int board_late_init(void)
load_disk_partitions();
prepare_fdt();
key_init();
+
+ power_led_init();
+
#ifdef CONFIG_POWER_RK
pmic_init(0);
fg_init(0); /*fuel gauge init*/

3.编译内核,参考Wiki<http://wiki.t-firefly.com/index.php/Firefly-RK3288/Build_kernel>中的编译内核映像部分

4.编译U-Boot,参考SDK下的“RKDocs/common/uboot/RockChip_Uboot开发文档V1.0.pdf”文档,编译生成RK3288Loader_uboot_V2.15.bin

5.烧写resource.img和RK3288Loader_uboot_V2.15.bin,开机。有没有发现LED灯比原来的快差不多两秒点亮呢

https://linux.cn/thread-13866-1-7.html

uboot中获取dts资源并操作gpio口的更多相关文章

  1. PHP从mysqli中获取的资源$result是不是不能while($row = $result->fetch_assoc())这样两次?【坑】

    PHP从mysqli中获取的资源$result是不是不能while($row = $result->fetch_assoc())这样两次? 因为我这样做,结果后面的查询结果就无法显示了,目前尚不 ...

  2. 在class中获取web资源

    背景介绍 项目中用jasperreport做报表,模板文件为web资源,不在classpath之中.class又需要获取模板文件,结合数据源,生成pdf格式的报表. 之前的做法是定义一个public ...

  3. mtk GPIO口

    http://blog.csdn.net/mcgrady_tracy/article/details/39320691 mt6582多达168个GPIO口,当然这些GPIO口是复用的,注意lk和Lin ...

  4. 通过JNDI从服务器容器中获取资源_Spring JNDI+Mysql+Tomcat

    通过JNDI从服务器容器中获取DataSource资源 (由容器管理,不要关闭它,容器自己会处理)上一篇我们使用的是dbcp,这里使用JNDI: 使用JNDI连接数据: 在Spring可以注释 < ...

  5. VC:res协议——从模块中获取资源

    你可以从模块中获取一个资源.通过在文件名之前加上res://,你就可以引用一个嵌入在动态链接库资源文件中的HTML页面.

  6. 在js中获取到的页面元素为undefined

    在学习js的过程中发现了一个问题就是:在js代码中获取页面元素进行操作的时候发现怎么都没有效果,控制台也不报错,弹出获取的元素结果发现是undefined类型. 后来查找了资料发现:因为我的js是写在 ...

  7. amlogic M8操作gpio bank

    參照规格书: r代表:读 a代表GPIOAO bank 0x28代表read bit echo r a 0x28 > /sys/class/amlogic/debug 操作GPIO口读取 w代表 ...

  8. 第十五节:Asp.Net Core中的各种过滤器(授权、资源、操作、结果、异常)

    一. 简介 1. 说明 提到过滤器,通常是指请求处理管道中特定阶段之前或之后的代码,可以处理:授权.响应缓存(对请求管道进行短路,以便返回缓存的响应). 防盗链.本地化国际化等,过滤器用于横向处理业务 ...

  9. [UWP]UWP中获取联系人/邮件发送/SMS消息发送操作

    这篇博客将介绍如何在UWP程序中获取联系人/邮件发送/SMS发送的基础操作. 1. 获取联系人 UWP中联系人获取需要引入Windows.ApplicationModel.Contacts名称空间. ...

随机推荐

  1. LINUX系统日常使用命令

    一.开关机命令1.shutdown -h now   关闭系统2.init 0   关闭系统3.telinit 0  关闭系统4.shutdown -h hours:minutes      按预定时 ...

  2. PHP5.5.38版本Zend Guard loader for 5.5安装(详细)

    第一次在博客园写东西记录自己,不,可以说第一次在网上写东西记录自己,我只是个菜鸟,具体的不太懂, 但是作为一个菜鸟我肯定把我遇到的问题给详细的表述出来,大神勿喷.在安装Zend Guard loade ...

  3. spring框架校验自定义注解

    起因: 项目开发时遇到一个问题是对于金额类型的字段,数据库中格式一般为BigDecimal类型,两位小数点,然后在接口定义中如果不定义成String类型的话,就不能使用@pattern注解限定格式,而 ...

  4. 项目(八) Jenkins持续集成与构建

    Jenkins环境搭建 由于Jenkins是依赖于java的,所以先介绍java环境的搭建 1)使用官方的二进制包解压安装,官方二进制包的下载地址:http://www.oracle.com/tech ...

  5. std::remove_reference

    [std::remove_reference] 用于移除类型的引用,返回原始类型. 1.可能的实现. 2.例子. #include <iostream> // std::cout #inc ...

  6. Linux安装jdk.18和tomcat8

    JDK1.8的安装 第一步:下载JDK1.8 1.百度搜索jdk1.8,打开属于oracle官网的搜索结果项 2.先点击接受协议选项,然后选择要下载的64位linux版本jdk,直接单击通过浏览器下载 ...

  7. 重写COMBOXEDIT

    一.需求 C#种的下拉框ComboBox不支持下拉复选框列表与下拉树形列表等,系统中需要用到的地方使用了第三方组件,现在需要将第三方组件替换掉. 二.设计 基本思路:重写ComboBox,将原生的下拉 ...

  8. CentOS7+CDH5.14.0安装全流程记录,图文详解全程实测-7主节点CM安装子节点Agent配置

    主节点安装cloudera manager 准备工作:下载CM和mysql连接驱动包: CM各版本下载地址:http://archive.cloudera.com/cm5/cm/5/ 从里面选择:ht ...

  9. Spring Boot HikariCP 一 ——集成多数据源

    其实这里介绍的东西主要是参考的另外一篇文章,数据库读写分离的. 参考文章就把链接贴出来,里面有那位的代码,简单明了https://gitee.com/comven/dynamic-datasource ...

  10. jQuery插件的一些想法

    之前在用ant-design和MUI的时候是一个系统的插件,应有尽有,当然jQuery也有系统性的插件,最近的项目没有用,所以一些需要插件的东西,需要哪种,找哪种,然后再引入项目中,首先百度搜索这类插 ...