rk3288 kernel-4.4 修改 mmc 编号

本文介绍如何在RK3288设备上将EMMC编号从mmc2改回mmc0的方法,涉及修改rk3288.dtsi文件中的EMMC配置顺序。

原来 3.0 内核, emmc 的编号是 mmc0. 到了 4.4 变成 mmc2 了.

要改回 mmc0, 只要修改 rk3288.dtsi 中 emmc 的顺序就可以了

old mode 100644
new mode 100755
index 18e6897..ac56932
--- a/arch/arm/boot/dts/rk3288.dtsi
+++ b/arch/arm/boot/dts/rk3288.dtsi
@@ -278,6 +278,19 @@
                ports = <&vopl_out>, <&vopb_out>;
        };

+       emmc: dwmmc@ff0f0000 {
+               compatible = "rockchip,rk3288-dw-mshc";
+               clock-freq-min-max = <400000 150000000>;
+               clocks = <&cru HCLK_EMMC>, <&cru SCLK_EMMC>,
+                        <&cru SCLK_EMMC_DRV>, <&cru SCLK_EMMC_SAMPLE>;
+               clock-names = "biu", "ciu", "ciu-drive", "ciu-sample";
+               fifo-depth = <0x100>;
+               interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>;
+               reg = <0x0 0xff0f0000 0x0 0x4000>;
+               status = "disabled";
+               supports-emmc;
+       };
+
        sdmmc: dwmmc@ff0c0000 {
                compatible = "rockchip,rk3288-dw-mshc";
                clock-freq-min-max = <400000 150000000>;
@@ -314,19 +327,6 @@
                status = "disabled";
        };

-       emmc: dwmmc@ff0f0000 {
:
                ports = <&vopl_out>, <&vopb_out>;
        };

+       emmc: dwmmc@ff0f0000 {
+               compatible = "rockchip,rk3288-dw-mshc";
+               clock-freq-min-max = <400000 150000000>;
+               clocks = <&cru HCLK_EMMC>, <&cru SCLK_EMMC>,
+                        <&cru SCLK_EMMC_DRV>, <&cru SCLK_EMMC_SAMPLE>;
+               clock-names = "biu", "ciu", "ciu-drive", "ciu-sample";
+               fifo-depth = <0x100>;
+               interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>;
+               reg = <0x0 0xff0f0000 0x0 0x4000>;
+               status = "disabled";
+               supports-emmc;
+       };
+
        sdmmc: dwmmc@ff0c0000 {
                compatible = "rockchip,rk3288-dw-mshc";
                clock-freq-min-max = <400000 150000000>;
@@ -314,19 +327,6 @@
                status = "disabled";
        };

-       emmc: dwmmc@ff0f0000 {
-               compatible = "rockchip,rk3288-dw-mshc";
-               clock-freq-min-max = <400000 150000000>;
-               clocks = <&cru HCLK_EMMC>, <&cru SCLK_EMMC>,
-                        <&cru SCLK_EMMC_DRV>, <&cru SCLK_EMMC_SAMPLE>;
-               clock-names = "biu", "ciu", "ciu-drive", "ciu-sample";
-               fifo-depth = <0x100>;
-               interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>;
-               reg = <0x0 0xff0f0000 0x0 0x4000>;
-               status = "disabled";
-               supports-emmc;
-       };
-
        saradc: saradc@ff100000 {
                compatible = "rockchip,saradc";
                reg = <0x0 0xff100000 0x0 0x100>;

 

<think>首先,用户的问题是:"我想配置RK3288的GPIO为高电平有效 请问RK3288 GPIO enable active high configuration"。翻译成英文是:"I want to configure RK3288's GPIO as active high. How to configure RK3288 GPIO enable active high?" 关键点: - 设备:RK3288Rockchip RK3288芯片) - 动作:配置GPIO为高电平有效(active high) - "enable active high" 可能意味着设置GPIO为高电平有效,即当GPIO输出高电平时,设备被启用。 在嵌入式系统中,GPIO可以配置为输入或输出模式。对于输出模式,"active high" 意味着当GPIO输出逻辑高(通常3.3V或5V)时,设备被激活;"active low" 意味着当GPIO输出逻辑低(0V)时,设备被激活。 用户提到 "enable active high",可能指的是在设备树(Device Tree)或驱动程序中配置GPIO的激活电平。 回顾系统指令: - 所有行内数学表达式用$...$,但这里可能不涉及数学。 - 独立公式用$$...$$,但可能不需要。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 引用段落末尾添加引用标识。 - 回答结构清晰,逐步解决问题。 - 参考站内引用,但用户提供的引用是关于RK3399、RK3288的设备树示例,可能相关。 用户提供的引用: - [^1]: RK3399 设备树基础设施。 - [^2]: RK3288 Settings app中的字符串资源。 - [^3]: RK3399 PCIe驱动移植,提到设备树。 - [^4]: RK3288 i2c接口OLED驱动的设备树配置。 这些引用中,[^4] 最相关,因为它展示了RK3288的设备树配置,特别是GPIO部分。 从[^4]中: - 设备树节点:i2c4,定义了GPIO引脚。 - 例如:`gpios = <&gpio7 GPIO_C1 GPIO_ACTIVE_LOW>, <&gpio7 GPIO_C2 GPIO_ACTIVE_LOW>;` - 这里,`GPIO_ACTIVE_LOW` 表示低电平有效。 用户想配置为高电平有效,所以应该使用 `GPIO_ACTIVE_HIGH`。 在Linux设备树中,GPIO的激活电平通常在设备节点中指定,使用 `gpio` 属性,如 `gpios = <&gpio_bank pin flags>;`,其中flags可以包括 `GPIO_ACTIVE_HIGH` 或 `GPIO_ACTIVE_LOW`。 `GPIO_ACTIVE_HIGH` 是默认值,但显式指定更好。 步骤来配置RK3288 GPIO为高电平有效: 1. **设备树配置**:在设备树源文件(.dts或.dtsi)中,找到相关的GPIO节点或添加一个新的节点。 2. **指定GPIO属性**:在节点中,使用 `gpios` 属性,并设置flags为 `GPIO_ACTIVE_HIGH`。 3. **编译和加载设备树**:编译设备树并加载到内核。 例如,假设用户想控制一个LED或外设,使用GPIO。 从[^4]的示例: ```dts &i2c4 { status = "okay"; i2c_oled@3c { compatible = "rk3288,i2c-oled"; reg = <0x3c>; }; }; ``` 但这是I2C设备,不是直接GPIO。 对于GPIO控制,用户可能需要定义一个GPIO节点。 一般步骤: - 在设备树中,添加一个节点,例如: ```dts my_gpio_device { compatible = "gpio-control"; gpios = <&gpio7 GPIO_C1 GPIO_ACTIVE_HIGH>; // 配置为高电平有效 // 其他属性 }; ``` - 然后,在驱动程序中,可以使用这个GPIO。 用户说 "enable active high",可能指的是使能信号是高电平有效。 在RK3288中,GPIO控制器是标准化的。 回答结构: 1. **理解需求**:解释什么是高电平有效。 2. **设备树配置**:展示如何在设备树中设置。 3. **驱动使用**:简要说明如何在驱动中使用。 4. **注意事项**:提到可能的问题,如引脚复用。 5. **生成相关问题**:基于主题。 使用中文回答。 引用相关部分:用户提供了引用,但[^4]最相关,所以我应该引用它。 在回答中,引用[^4]作为示例。 最终回答: - 开头:确认需求。 - 步骤:清晰列出配置步骤。 - 代码示例:使用设备树代码块。 - 结尾:生成相关问题。</think>### RK3288 GPIO 高电平有效配置指南 在 RK3288 嵌入式系统中,配置 GPIO 为高电平有效(active high)意味着当 GPIO 输出逻辑高电平(通常为 3.3V)时,外设(如 LED、继电器等)被激活或启用。这主要通过修改 Linux 设备树(Device Tree)来实现,设备树是描述硬件配置的核心文件。以下是详细的配置步骤,基于 RK3288 的 GPIO 子系统特性[^1]。 #### 步骤 1: 理解设备树中的 GPIO 激活电平 -RK3288 设备树中,GPIO 的激活电平通过 `gpios` 属性中的 flags 字段指定: - `GPIO_ACTIVE_HIGH`:高电平有效(默认值,但建议显式声明)。 - `GPIO_ACTIVE_LOW`:低电平有效(如引用[^4]中 `gpios = <&gpio7 GPIO_C1 GPIO_ACTIVE_LOW>` 的示例)。 - 如果未指定,系统默认为 `GPIO_ACTIVE_HIGH`,但显式配置可避免歧义[^1][^4]。 #### 步骤 2: 修改设备树源文件(.dts 或 .dtsi) 在设备树文件中,添加或修改一个 GPIO 控制节点。以下是一个完整示例,假设您要控制一个 GPIO 引脚(例如 GPIO7_C1),并设置为高电平有效: ```dts // 在设备树中添加或修改节点 / { my_gpio_device: my_gpio_device { compatible = "custom,gpio-control"; // 自定义驱动兼容性 gpios = <&gpio7 RK_PC1 GPIO_ACTIVE_HIGH>; // 关键:设置高电平有效 label = "my_active_high_gpio"; status = "okay"; }; }; // 确保 GPIO 控制器已启用(通常已在 rk3288.dtsi 中定义) &pinctrl { gpio7: gpio7@ff190000 { status = "okay"; }; }; ``` 关键参数说明: - `gpios = <&gpio7 RK_PC1 GPIO_ACTIVE_HIGH>`: - `gpio7`:GPIO 控制器编号RK3288 支持多个 bank,如 gpio0~gpio8)。 - `RK_PC1`:引脚号(C1 表示 bank7 的 C 组第 1 引脚)。 - `GPIO_ACTIVE_HIGH`:显式声明高电平有效。 - `status = "okay"`:启用该节点[^4]。 #### 步骤 3: 编译并加载新设备树 1. **编译设备树**: ```bash # 在 Linux SDK 中编译 make dtbs # 生成更新后的 .dtb 文件 ``` 2. **加载设备树**: - 将编译后的 `.dtb` 文件复制到启动分区(如 `/boot`),并重启系统。 - 验证是否生效: ```bash cat /proc/device-tree/my_gpio_device/gpios # 检查 GPIO 配置 ``` #### 步骤 4: 在驱动程序或用户空间使用 - **内核驱动**:在驱动代码中,通过 `gpiod_get()` 获取 GPIO 并设置方向: ```c struct gpio_desc *gpio; gpio = gpiod_get(dev, NULL, GPIOD_OUT_HIGH); // 初始输出高电平 gpiod_set_value(gpio, 1); // 输出高电平,激活外设 ``` - **用户空间**:通过 sysfs 控制: ```bash echo 509 > /sys/class/gpio/export # 假设 GPIO7_C1 编号为 509(计算:bank*32 + pin) echo "high" > /sys/class/gpio/gpio509/direction echo 1 > /sys/class/gpio/gpio509/value # 输出高电平 ``` #### 注意事项 - **引脚复用(Pinctrl)**:确保 GPIO 未被复用为其他功能(如 I2C、UART)。在设备树中检查 `pinctrl-0` 属性(参考引用[^4])。 - **电压匹配**:RK3288 GPIO 通常为 3.3V 电平,确保外设兼容。 - **错误排查**:如果无效,检查: - 设备树编译是否成功(dmesg | grep gpio)。 - 引脚是否冲突(cat /sys/kernel/debug/gpio)。 通过以上步骤,您可以可靠地配置 RK3288 GPIO 为高电平有效[^1][^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值