20250421在荣品的PRO-RK3566开发板的Android13下使用io命令控制GPIO
2025/4/21 10:44
【本文只打开了io命令。通过io控制GPIO放到下一篇了】
缘起:需要在荣品的PRO-RK3566开发板的Android13的u-boot中来控制GPIO3A1【配置以太网RTL8211F-CG】。
直接使用GPIO库函数 和 寄存器都异常了。
那就通过Android13系统中的io命令先确定寄存器再来搞u-boot了。
本周的问题:
1、uboot下配置GPIO3A1。地面站RK3566+Andorid13。要结案了。
确认以太网初始化的时候必须上电,如果当时不上电就像【MIPI CSI】摄像头一样,不会挂载了。
以后上电没用。
我最近的测试方向。通过io命令读写寄存器。
2、吊舱RK3566+Buildroot。RGA的4GB+内存问题?
3、RK3576前期预研。
1、
Z:\Android13.0\kernel-5.10\drivers\char\mem.c
【感觉不加这里,也已经编译mem.c生成mem.o了】
Z:\Android13.0\kernel-5.10\drivers\char\Makefile
obj-$(CONFIG_XILLYBUS) += xillybus/
obj-$(CONFIG_POWERNV_OP_PANEL) += powernv-op-panel.o
obj-$(CONFIG_ADI) += adi.o
【在最后面加】
obj-$(CONFIG_DEVMEM) += mem.o
2、
Z:\Android13.0\kernel-5.10\drivers\char\Kconfig
config DEVKMEM
bool "/dev/kmem virtual device support"
# On arm64, VMALLOC_START < PAGE_OFFSET, which confuses kmem read/write
depends on !ARM64
help
Say Y here if you want to support the /dev/kmem device. The
/dev/kmem device is rarely used, but can be used for certain
kind of kernel debugging operations.
When in doubt, say "N".
3、
Z:\Android13.0\kernel-5.10\drivers\char\mem.c
static const struct memdev {
const char *name;
umode_t mode;
const struct file_operations *fops;
fmode_t fmode;
} devlist[] = {
#ifdef CONFIG_DEVMEM
[DEVMEM_MINOR] = { "mem", 0, &mem_fops, FMODE_UNSIGNED_OFFSET },
#endif
#ifdef CONFIG_DEVKMEM
[2] = { "kmem", 0, &kmem_fops, FMODE_UNSIGNED_OFFSET },
#endif
[3] = { "null", 0666, &null_fops, 0 },
#ifdef CONFIG_DEVPORT
[4] = { "port", 0, &port_fops, 0 },
#endif
[5] = { "zero", 0666, &zero_fops, 0 },
[7] = { "full", 0666, &full_fops, 0 },
[8] = { "random", 0666, &random_fops, FMODE_NOWAIT },
[9] = { "urandom", 0666, &urandom_fops, FMODE_NOWAIT },
#ifdef CONFIG_PRINTK
[11] = { "kmsg", 0644, &kmsg_fops, 0 },
#endif
};
修改成为:
static const struct memdev {
const char *name;
umode_t mode;
const struct file_operations *fops;
fmode_t fmode;
} devlist[] = {
//#ifdef CONFIG_DEVMEM
[DEVMEM_MINOR] = { "mem", 0, &mem_fops, FMODE_UNSIGNED_OFFSET },
//#endif
#ifdef CONFIG_DEVKMEM
[2] = { "kmem", 0, &kmem_fops, FMODE_UNSIGNED_OFFSET },
#endif
[3] = { "null", 0666, &null_fops, 0 },
#ifdef CONFIG_DEVPORT
[4] = { "port", 0, &port_fops, 0 },
#endif
[5] = { "zero", 0666, &zero_fops, 0 },
[7] = { "full", 0666, &full_fops, 0 },
[8] = { "random", 0666, &random_fops, FMODE_NOWAIT },
[9] = { "urandom", 0666, &urandom_fops, FMODE_NOWAIT },
#ifdef CONFIG_PRINTK
[11] = { "kmsg", 0644, &kmsg_fops, 0 },
#endif
};
4、修改配置文件:
Z:\Android13.0\kernel-5.10\.config
CONFIG_SERIAL_MCTRL_GPIO=y
# CONFIG_SERIAL_NONSTANDARD is not set
# CONFIG_N_GSM is not set
# CONFIG_NOZOMI is not set
# CONFIG_NULL_TTY is not set
# CONFIG_TRACE_SINK is not set
# CONFIG_HVC_DCC is not set
# CONFIG_SERIAL_DEV_BUS is not set
# CONFIG_TTY_PRINTK is not set
# CONFIG_VIRTIO_CONSOLE is not set
# CONFIG_IPMI_HANDLER is not set
CONFIG_HW_RANDOM=y
# CONFIG_HW_RANDOM_TIMERIOMEM is not set
# CONFIG_HW_RANDOM_BA431 is not set
CONFIG_HW_RANDOM_CAVIUM=y
CONFIG_HW_RANDOM_OPTEE=y
# CONFIG_HW_RANDOM_CCTRNG is not set
# CONFIG_HW_RANDOM_XIPHERA is not set
CONFIG_HW_RANDOM_ROCKCHIP=y
# CONFIG_APPLICOM is not set
# CONFIG_DEVMEM is not set
# CONFIG_RAW_DRIVER is not set
# CONFIG_DEVPORT is not set
# CONFIG_TCG_TPM is not set
# CONFIG_XILLYBUS is not set
CONFIG_RANDOM_TRUST_BOOTLOADER=y
# end of Character devices
Z:\Android13.0\kernel-5.10\arch\arm64\configs\rockchip_defconfig
CONFIG_SERIAL_8250=y
# CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set
CONFIG_SERIAL_8250_CONSOLE=y
CONFIG_USB_SERIAL_CP210X=y
# CONFIG_SERIAL_8250_PCI is not set
CONFIG_SERIAL_8250_NR_UARTS=10
CONFIG_SERIAL_8250_RUNTIME_UARTS=10
CONFIG_SERIAL_8250_DW=y
CONFIG_HW_RANDOM=y
CONFIG_HW_RANDOM_ROCKCHIP=y
CONFIG_DEVMEM=y
# CONFIG_DEVPORT is not set
CONFIG_I2C_CHARDEV=y
CONFIG_I2C_GPIO=y
CONFIG_I2C_RK3X=y
CONFIG_SPI=y
CONFIG_SPI_ROCKCHIP=y
CONFIG_SPI_SPIDEV=y
5、效果:
console:/ $
console:/ $ su
console:/ #
console:/ #
console:/ # cd /dev
console:/dev #
console:/dev # ll mem
crw------- 1 media media 1, 1 2025-04-21 11:43 mem
console:/dev #
参考资料:
https://blog.csdn.net/weiqifa0/article/details/104243443
GPIO 使用 — Rockchip
RK3568
https://blog.csdn.net/sty01z/article/details/134421350
rk3566-安卓11-千兆网卡 rtl8211f 移植
https://blog.csdn.net/weixin_43564241/article/details/125668278
Linux内核(十)WIFI BT电路解析 对应设备树配置解析
https://wiki.t-firefly.com/zh_CN/ROC-RK3568-PC/driver_lcd.html
4. LCD使用
https://wiki.t-firefly.com/zh_CN/ROC-RK3566-PC/driver_lcd.html#config-pei-zhi
5. LCD使用 ROC-RK3566-PC
https://blog.csdn.net/sunqinglin4826/article/details/104848529
RK3399 Linux-SDK mipi屏幕驱动及调试
完整的LOG:
console:/ #
console:/ #
console:/ # io
Raw memory i/o utility - $Revision: 1.5 $
io -v -1|2|4 -r|w [-l <len>] [-f <file>] <addr> [<value>]
-v Verbose, asks for confirmation
-1|2|4 Sets memory access size in bytes (default byte)
-l <len> Length in bytes of area to access (defaults to
one access, or whole file length)
-r|w Read from or Write to memory (default read)
-f <file> File to write on memory read, or
to read on memory write
<addr> The memory address to access
<val> The value to write (implies -w)
Examples:
io 0x1000 Reads one byte from 0x1000
io 0x1000 0x12 Writes 0x12 to location 0x1000
io -2 -l 8 0x1000 Reads 8 words from 0x1000
io -r -f dmp -l 100 200 Reads 100 bytes from addr 200 to file
io -w -f img 0x10000 Writes the whole of file to memory
Note access size (-1|2|4) does not apply to file based accesses.
1|console:/ #
1|console:/ #
1|console:/ # io 0x1000
00001000: fd
console:/ #
console:/ # io 0x1000 0x12
console:/ #
console:/ # io 0x1000
00001000: 12
console:/ #
console:/ # io -2 -l 8 0x1000
00001000: 7b12 a9bf 00e3 9400
console:/ #
console:/ # io -r -f dmp -l 100 200
Failed to open destination file 'dmp': Read-only file system
1|console:/ #
【根目录不可写】
【在adb总配置】
adb root
adb remount
1|console:/ # io -r -f dmp -l 100 200
Failed to open destination file 'dmp': Read-only file system
1|console:/ # cat dmp
cat: dmp: No such file or directory
1|console:/ # touch dmp
touch: 'dmp': Read-only file system
1|console:/ #
1|console:/ # ll
total 76
drwxr-xr-x 2 root root 4096 2025-04-19 18:22 acct
drwxr-xr-x 27 root root 560 2025-04-21 10:41 apex
lrw-r--r-- 1 root root 11 2025-04-19 18:22 bin -> /system/bin
lrw-r--r-- 1 root root 50 2025-04-19 18:22 bugreports -> /data/user_de/0/com.android.shell/files/bugreports
drwxrwx--- 6 system cache 4096 2025-04-19 18:31 cache
drwxr-xr-x 3 root root 0 1970-01-01 08:00 config
lrw-r--r-- 1 root root 17 2025-04-19 18:22 d -> /sys/kernel/debug
drwxrwx--x 50 system system 4096 2025-04-21 10:42 data
drwx------ 8 root system 160 2025-04-21 10:41 data_mirror
drwxr-xr-x 2 root root 4096 2025-04-19 18:22 debug_ramdisk
drwxr-xr-x 26 root root 3160 2025-04-21 10:42 dev
lrw-r--r-- 1 root root 11 2025-04-19 18:22 etc -> /system/etc
lrwxr-x--- 1 root shell 16 2025-04-19 18:22 init -> /system/bin/init
-rwxr-x--- 1 root shell 463 2025-04-19 18:22 init.environ.rc
drwxr-xr-x 11 root root 260 2025-04-21 10:41 linkerconfig
drwx------ 2 root root 16384 2025-04-19 18:22 lost+found
drwxr-xr-x 13 root root 4096 2025-04-19 18:31 metadata
drwxr-xr-x 17 root system 360 2025-04-21 10:53 mnt
drwxr-xr-x 1 root root 3488 2025-04-21 10:53 odm
drwxr-xr-x 1 root root 3488 2025-04-21 10:53 odm_dlkm
drwxr-xr-x 2 root root 4096 2025-04-19 18:22 oem
drwxr-xr-x 2 root root 4096 2025-04-19 18:22 postinstall
dr-xr-xr-x 344 root root 0 2025-04-21 10:41 proc
drwxr-xr-x 1 root root 3488 2025-04-21 10:53 product
lrw-r--r-- 1 root root 21 2025-04-19 18:22 sdcard -> /storage/self/primary
drwxr-xr-x 2 root root 4096 2025-04-19 18:22 second_stage_resources
drwx--x--- 4 shell everybody 100 2025-04-21 10:42 storage
dr-xr-xr-x 15 root root 0 2025-04-21 10:41 sys
drwxr-xr-x 1 root root 3488 2025-04-21 10:53 system
drwxr-xr-x 1 root root 3488 2025-04-21 10:53 system_dlkm
drwxr-xr-x 1 root root 3488 2025-04-21 10:53 system_ext
drwxr-xr-x 1 root root 3488 2025-04-21 10:53 vendor
drwxr-xr-x 1 root root 3488 2025-04-21 10:53 vendor_dlkm
console:/ # cd data
console:/data #
console:/data #
console:/data # io -r -f dmp -l 100 200
console:/data # cat dmp
??_?yAB8?0?? ???????????_???6n@????console:/data #
console:/data #
console:/data # ll
total 224
drwx------ 2 root root 4096 2025-04-19 18:31 adb
drwxrwxr-x 2 system system 4096 2025-04-19 18:31 anr
console:/data # ll dmp
-rw------- 1 root root 100 2025-04-21 10:53 dmp
console:/data #
console:/data # io -w -f img 0x10000
Failed to open source file 'img': No such file or directory
1|console:/data #
1|console:/data # io -w -f dmp 0x10000
console:/data # ll
百度:RK3566 android io命令
BING:rk356x 在uboot下设置gpio引脚默认电平
RK3566 uboot GPIO 寄存器控制
rk3566 devmem
RK3566 uboot GPIO 寄存器控制
https://redmine.rpdzkj.cn/issues/234
gpio上电初始化-----uboot阶段gpio配置
https://blog.csdn.net/u011774634/article/details/136898819?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-136898819-blog-129007286.235^v43^pc_blog_bottom_relevance_base5&spm=1001.2101.3001.4242.1&utm_relevant_index=3
RK3399 Android7.1在uboot中设置GPIO的上下拉模式
https://www.cnblogs.com/xu-long/p/16805994.html
怎么在uboot下使用通用GPIO接口
一:在uboot下的defconfig 打开如下配置
CONFIG_DM=y
CONFIG_DM_GPIO=y
CONFIG_DWAPB_GPIO=y
CONFIG_CMD_GPIO=y
https://blog.csdn.net/weixin_45639314/article/details/138217098
RK平台 支持io命令
https://blog.csdn.net/daocaokafei/article/details/128336398?spm=1001.2101.3001.6650.17&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-17-128336398-blog-138217098.235%5Ev43%5Epc_blog_bottom_relevance_base5&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-17-128336398-blog-138217098.235%5Ev43%5Epc_blog_bottom_relevance_base5&utm_relevant_index=20
rk3568 | rk平台GPIO冲突检测小技巧
https://blog.csdn.net/jianfeng_520/article/details/144867968
瑞芯微(RK)IO操作寄存器
IO命令使用环境
IO命令需要依赖DEVMEM,而DEVMEM默认是关闭的,所以导致IO默认无法使用,需要在config中将DEVMEM打开,如下:
kernel/configs/rockchip/android-11.config
CONFIG_DEVMEM=y
https://blog.csdn.net/weiqifa0/article/details/104243443
GPIO 使用 — Rockchip
https://blog.csdn.net/u011774634/article/details/124988946?spm=1001.2101.3001.6650.18&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-18-124988946-blog-129007286.235%5Ev43%5Epc_blog_bottom_relevance_base5&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-18-124988946-blog-129007286.235%5Ev43%5Epc_blog_bottom_relevance_base5&utm_relevant_index=24
RK3399 Android7.1在uboot中设置GPIO的电平无效
uboot-set = <(RK3399_BT656_VDD_1V8 | RK3399_AUDIO_VDD_1V8 | RK3399_GPIO1833_VDD_3V3)>;
https://blog.csdn.net/dreamliweiming/article/details/134703414?spm=1001.2101.3001.6650.11&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-11-134703414-blog-131769320.235%5Ev43%5Epc_blog_bottom_relevance_base5&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-11-134703414-blog-131769320.235%5Ev43%5Epc_blog_bottom_relevance_base5&utm_relevant_index=15
RK3588 在uboot 和kernel下对GPIO的配置
static void func_gpio_init(void)
{
gpio_request(FUNC_GPIO_BANK2|FUNC_PA3,"FUNC_GPIO2_PA3");
gpio_direction_output(FUNC_GPIO_BANK2|FUNC_PA3,0);
gpio_request(FUNC_GPIO_BANK3|FUNC_PA3,"FUNC_GPIO3_PA3");
gpio_direction_output(FUNC_GPIO_BANK3|FUNC_PA3,0);
}
https://blog.csdn.net/weixin_43772810/article/details/129394668?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-4-129394668-blog-131769320.235^v43^pc_blog_bottom_relevance_base5&spm=1001.2101.3001.4242.3&utm_relevant_index=6
itop-3568开发板驱动学习笔记(5) 点灯实验(两种方法)
文章目录
ioremap 物理地址映射
调用 API
ioremap 物理地址映射
通过开发板原理图得知 LED 控制引脚为 GPIO0_B7,IO 高电平时,三极管导通,LED 点亮,IO 低电平时,三极管截止,LED 熄灭,
https://blog.csdn.net/kyling007/article/details/124862669
rk3288 _7.1_在U-boot上电时设置GPIO的电平值
夏日柠檬茶丶
一般在U-boot上就设置电平值,适用于电源的复位,MIPI、LVDS、GVI之类的屏幕控制上电时序,当然,也适用任何模块以及任何引脚。
注意:如果该区域的引脚存在电源域的保护机制,需要先解除保护。
通常情况下, 在 u-boot/common/board_f.c 文件上,都能设置GPIO引脚的电平值。今天讲一下不一样的设置方式。在rk3288_7.1/u-boot/board/rockchip/rk32xx/rk32xx.c的文件中,这个文件是板子初始化的文件,其中 board_late_init 函数是进行一些硬件初始化。代码如下
//自己写的函数
void set_down_up_GPIO(void)
{
printf("set_down_up GPIO5C2 GPIO7A3 \n");
gpio_direction_output(GPIO_BANK5|GPIO_C2, 0); // 设置GPIO5_C2 引脚的电平值为 0
gpio_direction_output(GPIO_BANK7|GPIO_A3, 0); // 设置GPIO7_A3 引脚的电平值为 0
msleep(500);
msleep(500);
gpio_direction_output(GPIO_BANK5|GPIO_C2, 1); // 设置GPIO5_C2 引脚的电平值为 1
gpio_direction_output(GPIO_BANK7|GPIO_A3, 1); // 设置GPIO7_A3 引脚的电平值为 1
}
https://blog.csdn.net/bbyjijun/article/details/129432452
RK3568平台入门到精通系列讲解之UBOOT开发篇(GPIO操作)
https://blog.csdn.net/sty01z/article/details/134421350
rk3566-安卓11-千兆网卡 rtl8211f 移植
https://blog.csdn.net/qinglongzhan/article/details/129836675
瑞芯微RK3568开发:GPIO实践篇
二、几种操作方式
1、io tool
io -4 -w 0xFDD6000C 0xffff4000
io -4 -w 0xFDD60004 0xffff4081
io -4 -r 0xFDD6000C
io也可以单字节操作,参考io -h
2、用户态类调用
内核注册了gpio接口操作命令行,
查看以注册gpio端口:cat /sys/kernel/debug/gpio;
申请和释放:echo n > /sys/class/gpio/export,echo n > /sys/class/gpio/unexport;
3、uboot或kernel编程
裸机直接对寄存器物理地址进行读写操作,如writel和readl;
上系统接口的话,有标准的gpio接口,dts和of_xxx那一套;
https://ask.csdn.net/questions/7991409
rk3568 gpio寄存器手册问题
¥15
arm
单片机
问题描述:
1、看下面两个链接,讲的都是uboot下writel对特定寄存器设置输入输出或者高低电平
https://blog.csdn.net/qinglongzhan/article/details/129836675
https://blog.csdn.net/qq_45147279/article/details/129007286
2、问题
不理解下面两句是怎样得到的,请求详细解释(分别对应上面2篇文章)
【1】writel(0xffff4080, 0xFDD6000C); //设置输出
writel(0xffff4081, 0xFDD60004); //设置高电平
【2】writel(0x00400040,0xfe77000C);//set output mode
writel(0x00400040,0xfe770004);//
3、举一反三
比如要设置GPIO0_C6 GPIO2_B3 GPIO2_B4为输出高电平,应该怎样写?