工具/软件:Linux
你(们)好
将 UART3_RTS 引脚(G18、ZCZ)设置为低电平时遇到问题。 无论我做什么(更改设备树、使用公开的导出功能)、我都可以将其设置为零。 (可能是内部上拉?)
我即将编写一个内核模块来读取 OE 寄存器并手动设置寄存器。
以下是有问题的内核模块片段:
在安装内核模块时调用以下函数。
以下是 AM335X 在安装模块时的 Linux 输出:
定义 GPIO2_START_ADDR 0x481AC000
#define GPIO2_END_ADDR 0x481ACFFF
//#define GPIO2_SIZE (GPIO2_END_ADDR - GPIO2_START_ADDR)
#define GPIO2_SIZE 0xFFF
#define UART3_RTS (1 << 31)
#define GPIO_OE 0x134
#define GPIO_SETDATAOUT 0x194
#define GPIO_CLEARDATAOUT 0x190
#define CU_MAJOR 42.
#define CU_GPIO"cucbasic GPIO"
volatile void * GPIO_addr =空;
volatile unsigned int *GPIO_setdataout_addr = NULL;
volatile unsigned int *GPIO_cleardataout_addr =空;
volatile unsigned int *GPIO_OE_addr = NULL;
void set_output (void)
{
//unsigned int reg;
GPIO_OE_addr = GPIO_addr + GPIO_OE;
GPIO_setdataout_addr = GPIO_addr + GPIO_SETDATAOUT;
GPIO_cleardataout_addr = GPIO_addr + GPIO_CLEARDATAOUT;
//reg =* GPIO_OE_addr;
PR_INFO ("OE_Register:%x\n"、* GPIO_OE_addr);
}
静态 int GPIO_init (void)
{
Int RV;
GPIO_addr = ioremap ((unsigned long) GPIO2_START_ADDR、GPIO2_SIZE);
printk (Kern_info "虚拟地址= 0x%x\n"、(无符号 int) GPIO_addr);
set_output();
PR_INFO ("init done");
RV = register_chrdev (CU_MAJOR、CU_GPIO、&FOPS);
返回(RV);
}
root@LTG-db8:/opt# insmod GPIO_config.ko
[49.850289] GPIO_config:加载树外模块会启用内核。
[49.859549] 虚拟地址= 0xfa1ac000
[86549.297] Unhandled fault:0xfa1ac134上非线性获取(0x1028)上的外部中止
[49.865305] PgD = dd5ac000
[49.865315] [FA1ac134]* PgD=48011452 (坏)
[49.865331] 内部错误:1028 [#1]抢占 ARM
[49.865371] 中链接的模块:GPIO_CONFIG (O+) spidev ti_AM335x_adc PWM_tiehrpwm omap_rng rng_core SPI_OMAP2_mcspi evdev ti_AM335x_tscadc uio_pdrv_genirq uio cpufreq_dt
[49.865388] CPU:0 PID:2153 Comm:insmod 被污染:G O 4.8.6-RT5 #2
[49.865392] 硬件名称:通用 AM33XX (平展器件树)
[86549.398] 任务:dc068b00 task.stack:dd664000
[49.865429] PC 处于 SET_OUTPUT +0x24/0x4c [GPIO_CONFIG]
[49.865433] LR 位于0xfa1ac134
[49.865442] PC:[ ] LR:[ ] PSR:60070013
[49.865442] sp:dd665d78 ip:dd665d88 fp:dd665d84
[49.865447] R10:bf04a400 R9:dd645a08 R8:bf04a448
[49.865453] r7:00000000 R6:c0d02088 r5:bf04a1b4 r4:ffe000
[49.865458] r3:fa1ac000 r2:bf04a600 r1:00000000 r0:bf04a2ac
[49.865466] 标志: 模式 SVC_32 ISA ARM 段无时 FIQ 上的 nZCv IRQ
[86549.473] 控制:10c5387d 表:9d5ac019 DAC:00000051
[49.865478] 工艺渗透(pid:2153、堆栈限制= 0xdd664210)
[49.865485] 堆栈:(0xdd665d78至0xdd666000)
[49.865494] 5d60: dd665d9c dd665d88
[49.865508] 5d80:bf04a1f4 bf04a044 bf04a1b4 c0d02088 dd665e1dd665da0 c01018e0 bf04a1c0
[49.865522] 5da0:dd665dfc dd665db0 c0206bfc c078ec8c dd665de4 dd665dc0 00000000 ffe000
[49.865536] 5dc0:dd645480 c021e7ec 00000001 462e8bcd dd645480 c023c508 dd645340 c01fccccccccccfcc.
[49.865550] 5de0:dd645340 00000000 00000001 00000002 dd645340 462e8bcd bf04a400 dd665f38
[49.865564] 5e00:dd645340 00000001 bf04a448 dd645a08 dd665e44 dd665e20 c01fcb38 c0101894
[49.865577] 5e20:dd645a00 00000001 dd665e44 00000001 dd665f38 dd645a00 dd665f14 dd665e48
[49.865591] 5e40:c01b0788 c01fcad8 bf04a40c 00007fff bf04a400 c01adff8 c080883c 00000000
[49.865605] 5e60:bf04a40c bf04a5c0 e091b5b4 00000000 c0808858 dd665f38 00001604 c0ae8bd0
[49.865619] 5e80:dd665ea4 462e8bcd dd61c840 dd665f2c 00000000 00000000 00000000 00000000
[49.865631] 5ea0:00000000 6e72656b 00006c65 00000000 00000000 00000000 00000000 00000000 00000000
[49.865644] 5ec0:00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[49.865658] 5ee0:00000000 462e8bcd 7ffff c0d02088 00000000 00000003 7f621e80 7ffffff
[49.865671] 5f00:00000000 dd665fa4 dd665f18 c01b0ffc c01ae7f4 7fffff 00000000
[49.865685] 5f20:00000003 c078d6f0 dd665f74 e091a000 00001604 00000000 e091a000 00001604
[49.865699] 5f40:e091b2e4 e091b220 e091ae44 00000610 00000800 00000000 00000000 00000000
[49.865712] 5f60:00000664 00000012 00000013 0000000b 00000008 00000004 00000000 462e8bcd
[86549.726] 5f80:9d966d00 7f61dcdc b6efff10 0000017b c0109368 dd664000 00000000 dd665fa8
[49.865739] 5fa0:c0109160 c01b0f28 9d966d00 7f61dcdc 00000003 7f621e80 00000000 00000002
[86549.753] 5fc0:9d966d00 7f61dcdc b6efff10 0000017b 00000000 7f61dcdc 7f634000 00000000
[86549.767] 5fe0:bedb5c40 bedb5c30 7f6186c3 b6e7aa42 80070030 00000003 00000000 00000000
[49.865772] 回溯:
[49.865800] [ ](SET_OUTPUT [GPIO_CONFIG])、来自[ ](cucbasic_gpio_init+0x40/0x88 [gpio_config])
[49.865828] [ ](cucbasic_gpio_init [gpio_config])、从[ ](do_one _initcall+0x58/0x1a8)
[49.865851] [ ](多个_initcall)、来自[ ](DO_INIT_MODULE+0x6c/0x3bc)
[49.865868] R9:dd645a08 R8:bf04a448 r7:00000001 R6:dd645340 R5:dd665f38 R4:bf04a400
[49.865882][ ](DO_INIT_MODULE)从[ ](load_module+0x1fa0/0x2568)
[49.865892] R6:dd645a00 R5:dd665f38 R4:00000001
[49.865903][ ](LOAD_MODULE)从[ ](SYS_FINIT_MODULE+0xe0/0x11c)
[86549.919] R10:00000000 R9:00000000 R8:7ffffff r7:7f621e80 R6:00000003 R5:00000000
[49.865924] R4:c0d02088
[49.865941] [ ](sys_finIT_module)从[ ](RET_FAST_SYSCALL+0x0/0x44)
[49.865958] R9:dd664000 R8:c0109368 r7:0000017b R6:b6efff10 R5:7f61dcdc R4:9d966d00
[86549.971] 代码:e59f2028 e59f0028 e5923000 e283ef4d (e5931134)
分割故障