This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

am335x gpio问题



有一个奇怪的问题不知道大家有没有遇到过

我们的板子上有一个挂载在i2c1上的eeprom的写保护接到这里了

在设备树上的配置如下

    eeprom_pins_default:pinmux_eeprom_pins {
        pinctrl-single,pins = <
            0xE0 (PIN_OUTPUT_PULLUP | MUX_MODE7)    /* lcd_vsync.gpio2_22 */
            >;
    };
    
    i2c1_pins_default: pinmux_i2c1_pins {
        pinctrl-single,pins = <
            0x168 (PIN_INPUT_PULLUP | MUX_MODE3) /* uart0_ctsn.i2c1_sda */
            0x16c (PIN_INPUT_PULLUP | SLEWCTRL_SLOW | MUX_MODE3) /* uart0_rtsn.i2c1_scl */
        >;
    };

&i2c1 {
    pinctrl-names = "default", "sleep";
    pinctrl-0 = <&i2c1_pins_default>;
    pinctrl-1 = <&i2c1_pins_sleep>;
    
    
    status = "okay";
    clock-frequency = <100000>;

    eeprom@54 {
        compatible = "at24,24c04";
        pinctrl-names = "default";
        pinctrl-0 = <&eeprom_pins_default>;
        gpios = <&gpio2 22 GPIO_ACTIVE_LOW>;
        reg = <0x54>;
    };

    eeprom@55 {
        compatible = "at24,24c04";
        pinctrl-names = "default";
        pinctrl-0 = <&eeprom_pins_default>;
        gpios = <&gpio2 22 GPIO_ACTIVE_LOW>;
        reg = <0x55>;
    };
    
};

内核驱动在获取这个gpio值的时候,直接就段错误了,但是gpio设置成比如说1 _5就没问题,

请求支持

  • # insmod at24.ko
    [ 247.302235] Unhandled fault: external abort on non-linefetch (0x1028) at 0xfa1ac134
    [ 247.310269] pgd = ddda4000
    [ 247.313103] [fa1ac134] *pgd=48011452(bad)
    [ 247.317325] Internal error: : 1028 [#1] PREEMPT ARM
    [ 247.322435] Modules linked in: at24(O+)
    [ 247.326475] CPU: 0 PID: 176 Comm: insmod Tainted: G O 4.1.18 #1
    [ 247.333857] Hardware name: Generic AM33XX (Flattened Device Tree)
    [ 247.340242] task: ddd4c480 ti: ddd6e000 task.ti: ddd6e000
    [ 247.345917] PC is at omap_gpio_output+0x50/0xa0
    [ 247.350664] LR is at omap_gpio_output+0x40/0xa0
    [ 247.355412] pc : [<c030cab8>] lr : [<c030caa8>] psr: 600d0093
    [ 247.355412] sp : ddd6fc28 ip : 00000190 fp : ddd6fc44
    [ 247.367437] r10: 00000100 r9 : ddbde620 r8 : 00000000
    [ 247.372909] r7 : 00000001 r6 : 00000016 r5 : a00d0013 r4 : dd8dfa64
    [ 247.379745] r3 : fa1ac134 r2 : 00000134 r1 : 00400000 r0 : dd8dfa10
    [ 247.386585] Flags: nZCv IRQs off FIQs on Mode SVC_32 ISA ARM Segment user
    [ 247.394150] Control: 10c5387d Table: 9dda4019 DAC: 00000015
    [ 247.400168] Process insmod (pid: 176, stack limit = 0xddd6e210)
    [ 247.406369] Stack: (0xddd6fc28 to 0xddd70000)
    [ 247.410937] fc20: dd8dfd08 c030ca68 ddd89890 00000001 ddd6fc5c ddd6fc48
    [ 247.419509] fc40: c0307e28 c030ca74 ddbde600 00000001 ddd6fc6c ddd6fc60 c03096bc c0307dc0
    [ 247.428081] fc60: ddd6fcd4 ddd6fc70 bf00091c c03096a4 ddd6fcd4 ddd6fc80 c04faee0 c04fac7c
    [ 247.436651] fc80: 00000000 00000000 00000000 00000000 00000001 00000001 ddd6fccc ddd6fca8
    [ 247.445223] fca0: c0174438 c0170ca8 ddbde620 bf000cb4 ddbde620 ddbde600 bf00066c ddbde604
    [ 247.453794] fcc0: 00000001 00000000 ddd6fcfc ddd6fcd8 c049bb7c bf000678 c090691c ddbde620
    [ 247.462365] fce0: 00000000 bf000fdc 00000006 00000001 ddd6fd24 ddd6fd00 c03f9280 c049ba8c
    [ 247.470937] fd00: ddbde620 bf000fdc ddbde654 00000000 ddd7bc40 00000001 ddd6fd44 ddd6fd28
    [ 247.479509] fd20: c03f94a4 c03f9110 00000000 bf000fdc c03f9410 00000000 ddd6fd6c ddd6fd48
    [ 247.488080] fd40: c03f75d8 c03f941c dd8cf70c ddbe1530 ddd892b4 bf000fdc ddd89280 c08c6544
    [ 247.496652] fd60: ddd6fd7c ddd6fd70 c03f8cec c03f7570 ddd6fda4 ddd6fd80 c03f89a0 c03f8cd8
    [ 247.505223] fd80: bf000f6c ddd6fd90 bf000fdc bf003000 c08986a8 ddd7bd80 ddd6fdbc ddd6fda8
    [ 247.513795] fda0: c03f9b74 c03f8864 bf000fc0 bf003000 ddd6fdd4 ddd6fdc0 c049c5b0 c03f9b00
    [ 247.522367] fdc0: c08986a8 bf003000 ddd6fde4 ddd6fdd8 bf00304c c049c588 ddd6fe64 ddd6fde8
    [ 247.530938] fde0: c0009718 bf00300c de79fe70 00000000 00000000 ddd7bc40 00000001 00080000
    [ 247.539509] fe00: ddd6fe44 ddd6fe10 c00bed90 c00be838 00000001 ddd7bc40 00000001 00000000
    [ 247.548080] fe20: ddd7b2c0 e0b4f000 00000001 ddd7bc40 00000001 bf00102c 0000001a bf00102c
    [ 247.556651] fe40: ddd7bc48 ddd7b2c0 bf001074 ddd7bc40 00000001 bf00102c ddd6fe8c ddd6fe68
    [ 247.565222] fe60: c062bb24 c000969c 00000001 bf001074 ddd6fe8c ddd6ff40 ddd7bc48 00000001
    [ 247.573793] fe80: ddd6ff3c ddd6fe90 c008e2d0 c062bad0 bf001038 00007fff c008b2f0 c00ea094
    [ 247.582365] fea0: 000002d2 00000000 bf001038 bf001158 e0b62240 bf001168 bf001074 ddd6ff40
    [ 247.590936] fec0: 000002d2 c008e578 000003a1 ffffffff 00109088 00000000 00000000 00000000
    [ 247.599506] fee0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
    [ 247.608076] ff00: 00000000 00000000 00000000 00000000 ddd6ff2c 00009c5f 00122ce7 00000000
    [ 247.616647] ff20: 000f6b54 ddd6e000 e0b68c5f 00000000 ddd6ffa4 ddd6ff40 c008e5e8 c008c7d0
    [ 247.625219] ff40: e0b4f000 00019c5f e0b61c78 e0b61b14 e0b686d0 00001168 00001398 00000000
    [ 247.633789] ff60: 00000000 00000000 00000025 00000026 0000000f 0000000c 00000008 00000000
    [ 247.642361] ff80: 000d56a8 00000183 00019c5f 00000080 c000fac4 ddd6e000 00000000 ddd6ffa8
    [ 247.650932] ffa0: c000f920 c008e510 000d56a8 00000183 00109088 00019c5f 000f6b54 be8f2f4a
    [ 247.659504] ffc0: 000d56a8 00000183 00019c5f 00000080 00108e20 be8f2e5c 000f6b54 00000000
    [ 247.668075] ffe0: be8f2c90 be8f2c80 00031e54 b6e15ad2 800d0030 00109088 9e7f2821 9e7f2c21
    [ 247.676637] Backtrace:
    [ 247.679216] [<c030ca68>] (omap_gpio_output) from [<c0307e28>] (_gpiod_direction_output_raw+0x74/0x13c)
    [ 247.688963] r7:00000001 r6:ddd89890 r5:c030ca68 r4:dd8dfd08
    [ 247.694920] [<c0307db4>] (_gpiod_direction_output_raw) from [<c03096bc>] (gpiod_direction_output_raw+0x24/0x44)
    [ 247.705485] r5:00000001 r4:ddbde600
    [ 247.709257] [<c0309698>] (gpiod_direction_output_raw) from [<bf00091c>] (at24_probe+0x2b0/0x5cc [at24])
    [ 247.719121] [<bf00066c>] (at24_probe [at24]) from [<c049bb7c>] (i2c_device_probe+0xfc/0x154)
    [ 247.727958] r10:00000000 r9:00000001 r8:ddbde604 r7:bf00066c r6:ddbde600 r5:ddbde620
    [ 247.736188] r4:bf000cb4
    [ 247.738856] [<c049ba80>] (i2c_device_probe) from [<c03f9280>] (driver_probe_device+0x17c/0x2c0)
    [ 247.747965] r9:00000001 r8:00000006 r7:bf000fdc r6:00000000 r5:ddbde620 r4:c090691c
    [ 247.756112] [<c03f9104>] (driver_probe_device) from [<c03f94a4>] (__driver_attach+0x94/0x98)
    [ 247.764947] r9:00000001 r8:ddd7bc40 r7:00000000 r6:ddbde654 r5:bf000fdc r4:ddbde620
    [ 247.773094] [<c03f9410>] (__driver_attach) from [<c03f75d8>] (bus_for_each_dev+0x74/0xa8)
    [ 247.781657] r7:00000000 r6:c03f9410 r5:bf000fdc r4:00000000
    [ 247.787611] [<c03f7564>] (bus_for_each_dev) from [<c03f8cec>] (driver_attach+0x20/0x28)
    [ 247.795993] r6:c08c6544 r5:ddd89280 r4:bf000fdc
    [ 247.800850] [<c03f8ccc>] (driver_attach) from [<c03f89a0>] (bus_add_driver+0x148/0x1f4)
    [ 247.809241] [<c03f8858>] (bus_add_driver) from [<c03f9b74>] (driver_register+0x80/0x100)
    [ 247.817712] r7:ddd7bd80 r6:c08986a8 r5:bf003000 r4:bf000fdc
    [ 247.823671] [<c03f9af4>] (driver_register) from [<c049c5b0>] (i2c_register_driver+0x34/0x88)
    [ 247.832507] r5:bf003000 r4:bf000fc0
    [ 247.836274] [<c049c57c>] (i2c_register_driver) from [<bf00304c>] (at24_init+0x4c/0x5c [at24])
    [ 247.845201] r5:bf003000 r4:c08986a8
    [ 247.848971] [<bf003000>] (at24_init [at24]) from [<c0009718>] (do_one_initcall+0x88/0x1e0)
    [ 247.857649] [<c0009690>] (do_one_initcall) from [<c062bb24>] (do_init_module+0x60/0x1b0)
    [ 247.866120] r10:bf00102c r9:00000001 r8:ddd7bc40 r7:bf001074 r6:ddd7b2c0 r5:ddd7bc48
    [ 247.874351] r4:bf00102c
    [ 247.877017] [<c062bac4>] (do_init_module) from [<c008e2d0>] (load_module+0x1b0c/0x1d40)
    [ 247.885398] r6:00000001 r5:ddd7bc48 r4:ddd6ff40
    [ 247.890256] [<c008c7c4>] (load_module) from [<c008e5e8>] (SyS_init_module+0xe4/0x138)
    [ 247.898455] r10:00000000 r9:e0b68c5f r8:ddd6e000 r7:000f6b54 r6:00000000 r5:00122ce7
    [ 247.906684] r4:00009c5f
    [ 247.909352] [<c008e504>] (SyS_init_module) from [<c000f920>] (ret_fast_syscall+0x0/0x3c)
    [ 247.917824] r9:ddd6e000 r8:c000fac4 r7:00000080 r6:00019c5f r5:00000183 r4:000d56a8
    [ 247.925970] Code: e59420b8 e514304c e1d220b2 e0833002 (e5932000)
    [ 247.932361] ---[ end trace 381dee72f4531d55 ]---
    [ 247.937203] note: insmod[176] exited with preempt_count 1
    Segmentation fault
  • 有没有测试过别的GPIO
  • 试过gpio1_x是可以的,2_10也不行,2_22也不行,主要这个东西感觉是基本操作啊,不知道为什么会出问题
  • 很奇怪啊
    result = gpio_request(GPIO_TO_PIN(2,22), "protect_gpio");//usr1
    if (result != 0)

    printk("gpio_request(1_22) failed!\n");
    gpio_set_value(GPIO_TO_PIN(2,22), 0);
    这种方式就不报错
  • 感谢分享经验