【开发基础】 使用io来操作寄存器_android_linux_register_kernel_debug

本帖最后由 54zw 于 2016-7-14 14:36 编辑

使用android 上的io 来操作 和读写GPIO举例(这个io只是简单的应用程序而已,不够强大,有兴趣的可以去看下Freescale imx 里的memtool, 在各种不同的平台开发过发现这个是最舒服的,Freescale 的工程师们确实花了更多的心思):

How to use memtool to debug your kernel 搜索memtool即可

回到正题,如何使用io:
从系统内存映射和device tree中都可以知道,GPIO0-GPIO3这4个bank的寄存器基地址是多少:
下面一gpio0为例:

    gpio0@2007c000 {
        compatible = "rockchip,gpio-bank";
        reg = <0x2007c000 0x100>;
        interrupts = <0x0 0x24 0x4>;
        clocks = <0x4d 0x9>;
        gpio-controller;
        #gpio-cells = <0x2>;
        interrupt-controller;
        #interrupt-cells = <0x2>;
        linux,phandle = <0x74>;
        phandle = <0x74>;
    };

可以看到GPIO0的寄存器基地址是0x2007c000
从GPIO控制器的手册可以查到这个对应的寄存器是GPIO_SWPORTA_DR:


读:
使用io 读出这个寄存器的值:(每一位对应GPIO0这个bank上的每一个管脚即GPIO0_A0-GPIO0-D7)
root@fireprime:/ # io -r -l 16 0x2007c000
2007c000: 00 00 00 02 00 00 00 4a 00 00 00 00 00 00 00 00

写:
比如要将GPIO0_D1拉高 对应的是这个寄存器的bit26
io -w 0x2007c003 2

注意这里并没有操作dir 和 mux 因为这里只是演示io来操作寄存器而已

32个赞

赞{:2_27:},可惜外链图片挂了

zhansb 发表于 2016-7-14 09:53
赞,可惜外链图片挂了

谢谢提醒,补上了图片:lol