Linux下用文件IO的方式操作GPIO(/sys/class/gpio)

一、概述

  通过 sysfs 方式控制 GPIO,先访问 /sys/class/gpio 目录,向 export 文件写入 GPIO 编号,使得该 GPIO 的操作接口从内核空间暴露到用户空间,GPIO 的操作接口包括 direction 和 value 等,direction 控制 GPIO 方向,而 value 可控制 GPIO 输出或获得 GPIO 输入。文件 IO 方式操作 GPIO,使用到了4个函数 open、close、read、write。
  
  首先,看看系统中有没有“/sys/class/gpio”这个文件夹。如果没有请在编译内核的时候加入:

Device Drivers -> 
        GPIO Support ->
                /sys/class/gpio/… (sysfs interface)。

二、/sys/class/gpio 的使用说明

  如果是在已经适配好的 Linux 内核上,那么相信已经有了完成的 gpiochip,可以在用户空间 /sys/class/gpio 目录下看到如下文件:

export
gpiochip0/
gpiochip32/
gpiochip64/
gpiochip96/
unexport

说明:

1、gpio_operation 通过 /sys/ 文件接口操作 IO 端口 GPIO 到文件系统的映射。
2、控制 GPIO 的目录位于 /sys/class/gpio。
3、/sys/class/gpio/export 文件用于通知系统需要导出控制的 GPIO 引脚编号。
4、/sys/class/gpio/unexport 用于通知系统取消导出。
5、/sys/class/gpio/gpiochipX 目录保存系统中 GPIO 寄存器的信息,包括每个寄存器控制引脚的起始编号 base,寄存器名称,引脚总数。

三、导出一个引脚的操作步骤

1、首先计算此引脚编号。

引脚编号 = 控制引脚的寄存器基数 + 控制引脚寄存器位数

  举个栗子(具体 GPIO 需要参考数据手册),如果使想用 GPIO1_20,那么引脚编号就可能等于 1 x 32 + 20 = 54。

2、向 /sys/class/gpio/export 写入此编号,比如12号引脚,在 shell 中可以通过以下命令实现:

echo 12 > /sys/class/gpio/export

  命令成功后生成 /sys/class/gpio/gpio12 目录,如果没有出现相应的目录,说明此引脚不可导出。
  
3、direction 文件,定义输入输入方向,可以通过下面命令定义为输出。

echo out > /sys/class/gpio/gpio12/direction

  direction 接受的参数可以是:in、out、high、low。其中参数 high / low 在设置方向为输出的同时,将 value 设置为相应的 1 / 0。
  
4、value 文件是端口的数值,为1或0,通过下面命令将 gpio12 设置为高电平。

echo 1 > /sys/class/gpio/gpio12/value

四、重温几个简单的例子

1、导出

# echo 44 > /sys/class/gpio/export

2、设置方向

# echo out > /sys/class/gpio/gpio44/direction

3、查看方向

# cat /sys/class/gpio/gpio44/direction

4、设置输出

# echo 1 > /sys/class/gpio/gpio44/value

5、查看输出值

# cat /sys/class/gpio/gpio44/value

6、取消导出

# echo 44 > /sys/class/gpio/unexport

五、文件读写例程

1、在用户空间使用

#include stdlib.h  
#include stdio.h  
#include string.h
#include unistd.h
#include fcntl.h   //define O_WRONLY and O_RDONLY  

//芯片复位引脚: P1_16
#define SYSFS_GPIO_EXPORT           "/sys/class/gpio/export"  
#define SYSFS_GPIO_RST_PIN_VAL      "48"   
#define SYSFS_GPIO_RST_DIR          "/sys/class/gpio/gpio48/direction"
#define SYSFS_GPIO_RST_DIR_VAL      "OUT"  
#define SYSFS_GPIO_RST_VAL          "/sys/class/gpio/gpio48/value"
#define SYSFS_GPIO_RST_VAL_H        "1"
#define SYSFS_GPIO_RST_VAL_L        "0"

int main() 
{ 
    int fd; 

         //打开端口/sys/class/gpio# echo 48 > export
         fd = open(SYSFS_GPIO_EXPORT, O_WRONLY);
         if(fd == -1)
         {
                   printf("ERR: Radio hard reset pin open error.\n");
                   return EXIT_FAILURE;
         }
         write(fd, SYSFS_GPIO_RST_PIN_VAL ,sizeof(SYSFS_GPIO_RST_PIN_VAL)); 
         close(fd); 

         //设置端口方向/sys/class/gpio/gpio48# echo out > direction
         fd = open(SYSFS_GPIO_RST_DIR, O_WRONLY);
         if(fd == -1)
         {
                   printf("ERR: Radio hard reset pin direction open error.\n");
                   return EXIT_FAILURE;
         }
         write(fd, SYSFS_GPIO_RST_DIR_VAL, sizeof(SYSFS_GPIO_RST_DIR_VAL)); 
         close(fd); 

         //输出复位信号: 拉高>100ns
         fd = open(SYSFS_GPIO_RST_VAL, O_RDWR);
         if(fd == -1)
         {
                   printf("ERR: Radio hard reset pin value open error.\n");
                   return EXIT_FAILURE;
         }       
         while(1)
         {
                   write(fd, SYSFS_GPIO_RST_VAL_H, sizeof(SYSFS_GPIO_RST_VAL_H));
                   usleep(1000000);
                   write(fd, SYSFS_GPIO_RST_VAL_L, sizeof(SYSFS_GPIO_RST_VAL_L));
                   usleep(1000000);
         }
         close(fd);

         printf("INFO: Radio hard reset pin value open error.\n");
         return 0;

}  

  除了上述例程的操作方法外,我们还可以有更简单地做法,就是编写 Shell 脚本。例如:

#!/bin/bash

echo 48 > /sys/class/gpio/gpio48/export
echo out > /sys/class/gpio/gpio48/direction
echo 1 > /sys/class/gpio/gpio48/value
usleep 1000
echo 0 > /sys/class/gpio/gpio48/value

2、在内核空间使用

#include <linux/gpio.h>

// 这里是配置成输出,默认高电平,名称为“gpio1_20”(就是给你的IO口取个名字)
gpio_request_one(54, GPIOF_INIT_HIGH, "gpio1_20")
// 这个就是配置成输入。
gpio_request_one(54, GPIOF_IN, "gpio1_20")
// 使用完后别忘了free
gpio_free(54);
  • 20
    点赞
  • 162
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
调通sina33m下的ap6181版本 大文实验室/大文哥 壹捌陆捌零陆捌捌陆捌贰 wb4916 AT qq.com 完成时间:2017/7/7 18:11 版本:V1.0 SDK:Android6.0.1 开发板:SC3817R 1、关闭“设置”中的“蓝牙”选项: R:\wyb\ap6181_sina33m_sc3817r\android\device\softwinner\astar-d7\overlay\frameworks\base\core\res\res\values\config.xml (干掉这里:) <!-- List of regexpressions describing the interface (if any) that represent tetherable bluetooth interfaces. If the device doesn't want to support tethering over bluetooth this should be empty. --> <!-- default: disable Bluetooth PAN feature --> <string-array translatable="false" name="config_tether_bluetooth_regexs"> <item>"bt-pan"</item> </string-array> 2、打开WIFI,关闭BT: R:\wyb\ap6181_sina33m_sc3817r\android\device\softwinner\astar-d7\astar_d7.mk PRODUCT_PACKAGES += Launcher3 PRODUCT_PACKAGES += \ ESFileExplorer \ VideoPlayer #Bluetooth PRODUCT_COPY_FILES += \ frameworks/native/data/etc/android.hardware.camera.xml:system/etc/permissions/android.hardware.camera.xml \ frameworks/native/data/etc/android.hardware.camera.front.xml:system/etc/permissions/android.hardware.camera.front.xml \ frameworks/native/data/etc/android.hardware.ethernet.xml:system/etc/permissions/android.hardware.ethernet.xml \ frameworks/native/data/etc/android.hardware.wifi.xml:system/etc/permissions/android.hardware.wifi.xml \ frameworks/native/data/etc/android.hardware.wifi.direct.xml:system/etc/permissions/android.hardware.wifi.direct.xml #frameworks/native/data/etc/android.hardware.bluetooth.xml:system/etc/permissions/android.hardware.bluetooth.xml \ #frameworks/native/data/etc/android.hardware.bluetooth_le.xml:system/etc/permissions/android.hardware.bluetooth_le.xml #PRODUCT_COPY_FILES += \ # device/softwinner/astar-d7/bluetooth/bt_vendor.conf:system/etc/bluetooth/bt_vendor.conf # bootanimation PRODUCT_COPY_FILES += \ device/softwinner/astar-d7/media/bootanimation.zip:system/media/bootanimation.zip # camera config for camera detector #PRODUCT_COPY_FILES += \ # device/softwinner/astar-d7/hawkview/sensor_list_cfg.ini:system/etc/hawkview/sensor_list_cfg.ini # Realtek wifi efuse map #PRODUCT_COPY_FILES += \ #device/softwinner/astar-d7/wifi_efuse_8723bs-vq0.map:system/etc/wifi/wifi_efuse_8723bs-vq0.map PRODUCT_PROPERTY_OVERRIDES += \ persist.sys.usb.config=mass_storage,adb \ ro.adb.secure=0 \ ro.sys.mutedrm=true \ rw.logger=0 #$(call inherit-product-if-exists, vendor/google/products/gms_base.mk) #for 8723bs-vq0,should setmacaddr #PRODUCT_PACKAGES += setmacaddr #for 8723bs-vq0,should setbtmacaddr #PRODUCT_PACKAGES += setbtmacaddr 3、修改WIFI为AP6181: R:\wyb\ap6181_sina33m_sc3817r\android\device\softwinner\astar-d7\BoardConfig.mk # 1.2 broadcom wifi support # BOARD_USR_WIFI:ap6181/ap6210/ap6212/ap6330/ap6335 BOARD_WIFI_VENDOR := broadcom ifeq ($(BOARD_WIFI_VENDOR), broadcom) BOARD_WPA_SUPPLICANT_DRIVER := NL80211 WPA_SUPPLICANT_VERSION := VER_0_8_X BOARD_WPA_SUPPLICANT_PRIVATE_LIB := lib_driver_cmd_bcmdhd BOARD_HOSTAPD_DRIVER := NL80211 BOARD_HOSTAPD_PRIVATE_LIB := lib_driver_cmd_bcmdhd BOARD_WLAN_DEVICE := bcmdhd WIFI_DRIVER_FW_PATH_PARAM := "/sys/module/bcmdhd/parameters/firmware_path" BOARD_USR_WIFI := ap6181 include hardware/broadcom/wlan/bcmdhd/firmware/$(BOARD_USR_WIFI)/device-bcm.mk endif # 2. Bluetooth Configuration # make sure BOARD_HAVE_BLUETOOTH is true for every bt vendor # BOARD_HAVE_BLUETOOTH_NAME:rtl8723bs/rtl8723bs_vq0/rtl8723cs/ap6210/ap6212/ap6330/ap6335/ #BOARD_HAVE_BLUETOOTH := true # #BOARD_HAVE_BLUETOOTH_BCM := true #BOARD_HAVE_BLUETOOTH_NAME := ap6212 #BOARD_HAVE_BLUETOOTH_RTK_COEX := true #BOARD_HAVE_BLUETOOTH_RTK := true #BLUETOOTH_HCI_USE_RTK_H5 := true #BOARD_BLUETOOTH_BDROID_BUILDCFG_INCLUDE_DIR := device/softwinner/astar-d7/bluetooth 4、关闭BT: R:\wyb\ap6181_sina33m_sc3817r\android\device\softwinner\astar-d7\init.sun8i.rc # tp & sensors init_dev_detect # network insmod /system/vendor/modules/bcmdhd.ko #insmod /system/vendor/modules/bcm_btlpm.ko insmod /system/vendor/modules/usbnet.ko insmod /system/vendor/modules/asix.ko insmod /system/vendor/modules/qf9700.ko #insmod /system/vendor/modules/mcs7830.ko #insmod /system/vendor/modules/smsc95xx.ko insmod /system/vendor/modules/rtl8152.ko #insmod /system/vendor/modules/cdc_ether.ko # GPS # chmod 777 /system/bin/glgps # chown root system /system/bin/glgps # chmod 777 /system/lib/hw/gps.default.so # chown root system /system/lib/hw/gps.default.so # mkdir /data/gps # chmod 770 /data/gps # chown system net_bt_stack /data/gps # to observe dnsmasq.leases file for dhcp information of soft ap. chown dhcp system /data/misc/dhcp on post-fs-data mkdir /data/media 0770 media_rw media_rw # bluetooth MAC address programming #chown bluetooth net_bt_stack ro.bt.bdaddr_path #chown bluetooth net_bt_stack /system/etc/bluetooth #chown bluetooth net_bt_stack /data/misc/bluetooth #setprop ro.bt.bdaddr_path "/data/misc/bluetooth/bdaddr" # Set indication (checked by vold) that we have finished this action setprop vold.post_fs_data_done 1 # to force to start sdcard # class_start late_start # This module write data to /data should insmod in post-fs-data # due to encryption on boot chown system system /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor chmod 0660 /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor chown system system /sys/kernel/autohotplug/enable chmod 0660 /sys/kernel/autohotplug/enable chown system system /sys/devices/system/cpu/cpu0/cpufreq/boot_lock chmod 0660 /sys/devices/system/cpu/cpu0/cpufreq/boot_lock chown system system /sys/devices/platform/sunxi-budget-cooling/roomage chmod 0660 /sys/devices/platform/sunxi-budget-cooling/roomage chown system system /sys/class/devfreq/sunxi-ddrfreq/dsm/scene chmod 0660 /sys/class/devfreq/sunxi-ddrfreq/dsm/scene on charger insmod disp.ko insmod lcd.ko class_start charger write /sys/module/printk/parameters/console_suspend N write /proc/sys/kernel/printk 0 on fs # UDISK would be mounted as data partition when multiple user enabled. #format_userdata /dev/block/by-name/UDISK ASTAR #bluesleep #insmod /system/vendor/modules/rtl_bluesleep.ko ## bluetooth ## UART device #chmod 0660 /dev/ttyS1 #chown bluetooth net_bt_stack /dev/ttyS1 # ## power up/down interface #chmod 0660 /sys/class/rfkill/rfkill0/state #chmod 0660 /sys/class/rfkill/rfkill0/type #chown bluetooth net_bt_stack /sys/class/rfkill/rfkill0/state #chown bluetooth net_bt_stack /sys/class/rfkill/rfkill0/type # # ## bluetooth LPM #chmod 0220 /proc/bluetooth/sleep/lpm #chmod 0220 /proc/bluetooth/sleep/btwrite #chown bluetooth net_bt_stack /proc/bluetooth/sleep/lpm #chown bluetooth net_bt_stack /proc/bluetooth/sleep/btwrite #write /proc/bluetooth/sleep/lpm 1 5、可选: R:\wyb\ap6181_sina33m_sc3817r\android\device\softwinner\astar-d7\ueventd.sun8i.rc #/dev/video1 0777 media media /dev/snd/pcmC0D0c 0777 media media /dev/snd/pcmC0D0p 0777 media media #/dev/ttyS1 0660 bluetooth bluetooth 6、可选: R:\wyb\ap6181_sina33m_sc3817r\android\frameworks\base\packages\SettingsProvider\res\values\defaults.xml <integer name="def_screen_off_timeout">1800000</integer> <bool name="def_lockscreen_disabled">true</bool> 7、请严重注意,全志在这里埋坑了!(坑爹无敌!) Android里面调入配置文件:nvram.txt,里面里面调入:nvram_ap6181.txt。 R:\wyb\ap6181_sina33m_sc3817r\android\hardware\broadcom\wlan\bcmdhd\firmware\ap6181\config.txt R:\wyb\ap6181_sina33m_sc3817r\android\hardware\broadcom\wlan\bcmdhd\firmware\ap6181\device-bcm.mk # # Copyright (C) 2008 The Android Open Source Project # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # -include hardware/broadcom/wlan/bcmdhd/config/config-bcm.mk WIFI_DRIVER_FW_PATH_STA := "/system/vendor/modules/fw_bcm40181a2.bin" WIFI_DRIVER_FW_PATH_P2P := "/system/vendor/modules/fw_bcm40181a2_p2p.bin" WIFI_DRIVER_FW_PATH_AP := "/system/vendor/modules/fw_bcm40181a2_apsta.bin" PRODUCT_COPY_FILES += \ hardware/broadcom/wlan/bcmdhd/firmware/ap6181/fw_bcm40181a2_p2p.bin:system/vendor/modules/fw_bcm40181a2_p2p.bin \ hardware/broadcom/wlan/bcmdhd/firmware/ap6181/fw_bcm40181a2_apsta.bin:system/vendor/modules/fw_bcm40181a2_apsta.bin \ hardware/broadcom/wlan/bcmdhd/firmware/ap6181/fw_bcm40181a2.bin:system/vendor/modules/fw_bcm40181a2.bin \ hardware/broadcom/wlan/bcmdhd/firmware/ap6181/nvram_ap6181.txt:system/vendor/modules/nvram_ap6181.txt \ hardware/broadcom/wlan/bcmdhd/firmware/ap6181/config.txt:system/vendor/modules/config.txt R:\wyb\ap6181_sina33m_sc3817r\android\hardware\broadcom\wlan\bcmdhd\firmware\ap6181\fw_bcm40181a2.bin R:\wyb\ap6181_sina33m_sc3817r\android\hardware\broadcom\wlan\bcmdhd\firmware\ap6181\fw_bcm40181a2_apsta.bin R:\wyb\ap6181_sina33m_sc3817r\android\hardware\broadcom\wlan\bcmdhd\firmware\ap6181\fw_bcm40181a2_p2p.bin R:\wyb\ap6181_sina33m_sc3817r\android\hardware\broadcom\wlan\bcmdhd\firmware\ap6181\nvram_ap6181.txt 8、可选: R:\wyb\ap6181_sina33m_sc3817r\android\packages\apps\Camera2\src\com\android\camera\CameraActivity.java 9、可选: R:\wyb\ap6181_sina33m_sc3817r\lichee\linux-3.4\arch\arm\mach-sunxi\rf\bt_pm.c static int rfkill_set_power(void *data, bool blocked) { unsigned int mod_sel = wifi_pm_get_mod_type(); RF_MSG("rfkill set power %d\n", blocked); switch (mod_sel) { case 2: /* ap6210 */ if (!blocked) { wifi_pm_gpio_ctrl("ap6xxx_bt_regon", 1); } else { wifi_pm_gpio_ctrl("ap6xxx_bt_regon", 0); } break; case 4: /* realtek rtl8723au */ if (!blocked) { wifi_pm_gpio_ctrl("rtl8723au_bt", 1); } else { wifi_pm_gpio_ctrl("rtl8723au_bt", 0); } break; case 5: /* realtek rtl8723bs */ if (!blocked) { wifi_pm_gpio_ctrl("rtl8723bs_bt_regon", 1); } else { wifi_pm_gpio_ctrl("rtl8723bs_bt_regon", 0); } break; case 7: /* ap6476 */ if (!blocked) { wifi_pm_gpio_ctrl("ap6xxx_bt_regon", 1); } else { wifi_pm_gpio_ctrl("ap6xxx_bt_regon", 0); } break; case 9: /* ap6212 */ if (!blocked) { wifi_pm_gpio_ctrl("ap6xxx_bt_regon", 1); } else { wifi_pm_gpio_ctrl("ap6xxx_bt_regon", 0); } break; default: RF_MSG("no bt module matched !!\n"); } msleep(10); return 0; } 10、可选: R:\wyb\ap6181_sina33m_sc3817r\lichee\linux-3.4\arch\arm\mach-sunxi\rf\wifi_pm.c struct wifi_pm_ops wifi_select_pm_ops; static char* wifi_mod[] = {" ", "ap6181", /* 1 - AP6181*/ "ap6210", /* 2 - AP6210*/ "rtl8188eu", /* 3 - RTL8188EU*/ "rtl8723au", /* 4 - RTL8723AU*/ "rtl8723bs", /* 5 - RTL8723BS*/ "esp8089", /* 6 - ESP8089*/ "ap6476", /* 7 - AP6476*/ "rtl8189es", /* 8 - rtl8189es*/ "ap6212", /* 9 - AP6212*/ "ap6330", /* 10- AP6330*/ "gb9663", /* 11- GB9663*/ }; static int __devinit wifi_pm_probe(struct platform_device *pdev) { struct wifi_pm_ops *ops = &wifi_select_pm_ops; switch (ops->module_sel.val) { case 1: /* AP6181 */ ap6xxx_gpio_init(); break; case 2: /* AP6210 */ ap6xxx_gpio_init(); break; case 3: /* RTL8188EU */ rtl8188eu_gpio_init(); break; case 4: /* RTL8723AU */ rtl8723au_gpio_init(); break; case 5: /* RTL8723BS */ rtl8723bs_gpio_init(); break; case 6: /* ESP8089 */ esp8089_gpio_init(); break; case 7: /* AP6476 */ ap6xxx_gpio_init(); break; case 8: /* rtl8189es */ rtl8189es_gpio_init(); break; case 9: /* AP6212 */ ap6xxx_gpio_init(); break; default: wifi_pm_msg("wrong sdio module select %d !\n", ops->module_sel.val); } awwifi_procfs_attach(); wifi_pm_msg("wifi gpio init is OK !!\n"); return 0; } 11、可选: R:\wyb\ap6181_sina33m_sc3817r\lichee\linux-3.4\drivers\net\wireless\bcmdhd\include\bcmdevs.h #define BCM4350_CHIP_ID 0x4350 #define BCM43430_CHIP_ID 43430 /* 43430 chipcommon chipid 0xa9a6 */ #define BCM4342_CHIP_ID 4342 R:\wyb\ap6181_sina33m_sc3817r\lichee\linux-3.4\drivers\net\wireless\bcmdhd\dhd_common.c void dhd_common_init(osl_t *osh) { int select_type = 0; //aw checkout which wifi had select //select_type = wifi_pm_get_mod_type(); select_type = 1; #ifdef CONFIG_BCMDHD_FW_PATH //select ap6181 or ap6210 or ap6476 if (select_type == 1 || select_type == 2 || select_type == 7) { bcm_strncpy_s(fw_path, sizeof(fw_path), "/system/vendor/modules/fw_bcm40181a2.bin", MOD_PARAM_PATHLEN-1); } #else /* CONFIG_BCMDHD_FW_PATH */ fw_path[0] = '\0'; #endif /* CONFIG_BCMDHD_FW_PATH */ #ifdef CONFIG_BCMDHD_NVRAM_PATH switch (select_type) { //ap6181 case 1: bcm_strncpy_s(nv_path, sizeof(nv_path), "/system/vendor/modules/nvram_ap6181.txt", MOD_PARAM_PATHLEN-1); break; //ap6210 case 2: bcm_strncpy_s(nv_path, sizeof(nv_path), "/system/vendor/modules/nvram_ap6210.txt", MOD_PARAM_PATHLEN-1); break; //ap6476 case 7: bcm_strncpy_s(nv_path, sizeof(nv_path), "/system/vendor/modules/nvram_ap6476.txt", MOD_PARAM_PATHLEN-1); break; //ap6212 case 9: bcm_strncpy_s(nv_path, sizeof(nv_path), "/system/vendor/modules/nvram.txt", MOD_PARAM_PATHLEN-1); break; default: break; } #else /* CONFIG_BCMDHD_NVRAM_PATH */ nv_path[0] = '\0'; #endif /* CONFIG_BCMDHD_NVRAM_PATH */ #ifdef CONFIG_BCMDHD_CONFIG_PATH bcm_strncpy_s(conf_path, sizeof(conf_path), "/system/vendor/modules/config.txt", MOD_PARAM_PATHLEN-1); #else /* CONFIG_BCMDHD_CONFIG_PATH */ conf_path[0] = '\0'; #endif /* CONFIG_BCMDHD_CONFIG_PATH */ #ifdef SOFTAP fw_path2[0] = '\0'; #endif } R:\wyb\ap6181_sina33m_sc3817r\lichee\linux-3.4\drivers\net\wireless\bcmdhd\dhd_linux.c int dhd_bus_start(dhd_pub_t *dhdp) { int ret = -1; dhd_info_t *dhd = (dhd_info_t*)dhdp->info; unsigned long flags; ASSERT(dhd); DHD_TRACE(("Enter %s:\n", __FUNCTION__)); #ifdef DHDTHREAD if (dhd->threads_only) dhd_os_sdlock(dhdp); #endif /* DHDTHREAD */ /* try to download image and nvram to the dongle */ if ((dhd->pub.busstate == DHD_BUS_DOWN) && (fw_path[0] != '\0') && (nv_path[0] != '\0')) { #ifdef SHOW_NVRAM_TYPE { /* Show nvram type in the kernel log */ int i; for (i = 0; nv_path[i] != '\0'; ++i) { if (nv_path[i] == '.') { ++i; break; } } DHD_ERROR(("%s: nvram_type = [%s]\n", __FUNCTION__, &nv_path[i])); } #endif /* SHOW_NVRAM_TYPE */ /* wake lock moved to dhdsdio_download_firmware */ if (!(dhd_bus_download_firmware(dhd->pub.bus, dhd->pub.osh, fw_path, nv_path, conf_path))) { DHD_ERROR(("%s: dhdsdio_probe_download failed. firmware = %s nvram = %s config = %s\n", __FUNCTION__, fw_path, nv_path, conf_path)); #ifdef DHDTHREAD if (dhd->threads_only) dhd_os_sdunlock(dhdp); #endif /* DHDTHREAD */ // 2017/6/23 18:40 wenyuanbo download ap6212 fail not return error!!!! //return -1; } } if (dhd->pub.busstate != DHD_BUS_LOAD) { #ifdef DHDTHREAD if (dhd->threads_only) dhd_os_sdunlock(dhdp); #endif /* DHDTHREAD */ return -ENETDOWN; } /* Start the watchdog timer */ dhd->pub.tickcnt = 0; dhd_os_wd_timer(&dhd->pub, dhd_watchdog_ms); /* Bring up the bus */ if ((ret = dhd_bus_init(&dhd->pub, FALSE)) != 0) { DHD_ERROR(("%s, dhd_bus_init failed %d\n", __FUNCTION__, ret)); #ifdef DHDTHREAD if (dhd->threads_only) dhd_os_sdunlock(dhdp); #endif /* DHDTHREAD */ return ret; } bcmsdh_set_drvdata(dhdp); // terence 20130427: fix for null pointer issue #if defined(OOB_INTR_ONLY) /* Host registration for OOB interrupt */ if (bcmsdh_register_oob_intr(dhdp)) { /* deactivate timer and wait for the handler to finish */ flags = dhd_os_spin_lock(&dhd->pub); dhd->wd_timer_valid = FALSE; dhd_os_spin_unlock(&dhd->pub, flags); del_timer_sync(&dhd->timer); DHD_ERROR(("%s Host failed to register for OOB\n", __FUNCTION__)); #ifdef DHDTHREAD if (dhd->threads_only) dhd_os_sdunlock(dhdp); #endif /* DHDTHREAD */ DHD_OS_WD_WAKE_UNLOCK(&dhd->pub); return -ENODEV; } /* Enable oob at firmware */ dhd_enable_oob_intr(dhd->pub.bus, TRUE); #endif /* If bus is not ready, can't come up */ if (dhd->pub.busstate != DHD_BUS_DATA) { flags = dhd_os_spin_lock(&dhd->pub); dhd->wd_timer_valid = FALSE; dhd_os_spin_unlock(&dhd->pub, flags); del_timer_sync(&dhd->timer); DHD_ERROR(("%s failed bus is not ready\n", __FUNCTION__)); #ifdef DHDTHREAD if (dhd->threads_only) dhd_os_sdunlock(dhdp); #endif /* DHDTHREAD */ DHD_OS_WD_WAKE_UNLOCK(&dhd->pub); return -ENODEV; } #ifdef DHDTHREAD if (dhd->threads_only) dhd_os_sdunlock(dhdp); #endif /* DHDTHREAD */ dhd_process_cid_mac(dhdp, TRUE); /* Bus is ready, do any protocol initialization */ if ((ret = dhd_prot_init(&dhd->pub)) < 0) return ret; dhd_process_cid_mac(dhdp, FALSE); #ifdef ARP_OFFLOAD_SUPPORT if (dhd->pend_ipaddr) { #ifdef AOE_IP_ALIAS_SUPPORT aoe_update_host_ipv4_table(&dhd->pub, dhd->pend_ipaddr, TRUE, 0); #endif /* AOE_IP_ALIAS_SUPPORT */ dhd->pend_ipaddr = 0; } #endif /* ARP_OFFLOAD_SUPPORT */ return 0; } R:\wyb\ap6181_sina33m_sc3817r\lichee\linux-3.4\drivers\net\wireless\bcmdhd\dhd_sdio.c static bool dhdsdio_chipmatch(uint16 chipid) { if (chipid == BCM4325_CHIP_ID) return TRUE; if (chipid == BCM4329_CHIP_ID) return TRUE; if (chipid == BCM4315_CHIP_ID) return TRUE; if (chipid == BCM4319_CHIP_ID) return TRUE; if (chipid == BCM4336_CHIP_ID) return TRUE; if (chipid == BCM4330_CHIP_ID) return TRUE; if (chipid == BCM43237_CHIP_ID) return TRUE; if (chipid == BCM43362_CHIP_ID) return TRUE; if (chipid == BCM4314_CHIP_ID) return TRUE; if (chipid == BCM43242_CHIP_ID) return TRUE; if (chipid == BCM43340_CHIP_ID) return TRUE; if (chipid == BCM43341_CHIP_ID) return TRUE; if (chipid == BCM43143_CHIP_ID) return TRUE; if (chipid == BCM43342_CHIP_ID) return TRUE; if (chipid == BCM4334_CHIP_ID) return TRUE; if (chipid == BCM43239_CHIP_ID) return TRUE; if (chipid == BCM4324_CHIP_ID) return TRUE; if (chipid == BCM4335_CHIP_ID) return TRUE; if (chipid == BCM4339_CHIP_ID) return TRUE; if (chipid == BCM4350_CHIP_ID) return TRUE; if (chipid == BCM43430_CHIP_ID) return TRUE; return FALSE; } R:\wyb\ap6181_sina33m_sc3817r\lichee\tools\pack\chips\sun8iw5p1\configs\d7\sys_config.fex [power_sply] dcdc1_vol = 3000 dcdc2_vol = 1100 dcdc3_vol = 1200 dcdc4_vol = 0 dcdc5_vol = 1500 aldo1_vol = 3300 aldo2_vol = 2500 aldo3_vol = 3000 dldo1_vol = 3300 dldo2_vol = 3300 dldo3_vol = 2800 ;gpio0_vol = 2800 ldoio0_vol = 2800 [jtag_para] jtag_enable = 0 ;***************************************************************************** ;sdram configuration ; ;***************************************************************************** [dram_para] dram_clk = 552 [wakeup_src_para] cpu_en = 0 cpu_freq = 48 ; (cpu:apb:ahb) pll_ratio = 0x111 dram_selfresh_en= 1 dram_freq = 36 wakeup_src_wl = port:PL07<4><default><default><0> ;wakeup_src_bt = port:PL09<4><default><default><0> ;bb_wake_ap = port:PL02<4><default><default><0> [uart0] uart_used = 1 uart_port = 0 uart_type = 2 uart_tx = port:PF02<3><1><default><default> uart_rx = port:PF04<3><1><default><default> ;---------------------------------------------------------------------------------- ;capacitor tp configuration ;ctp_twi_id : twi controller ID ;ctp_twi_addr : I2C slave address, 7bit ;ctp_screen_max_x/_y : resolution of touch panel ;ctp_revert_x/_y_flag : whether need to revert x/y ;ctp_exchange_x_y_flag: whether need to exchange the value of x and y ;ctp_int_port : port for tp's interrupt signal ;ctp_wakeup : port for wakeup tp ;---------------------------------------------------------------------------------- [ctp_para] ctp_used = 1 ctp_name = "gt82x" ctp_twi_id = 0 ctp_twi_addr = 0x5d ctp_screen_max_x = 1280 ctp_screen_max_y = 800 ctp_revert_x_flag = 1 ctp_revert_y_flag = 1 ctp_exchange_x_y_flag = 1 ctp_int_port = port:PL04<4><default><default><default> ctp_wakeup = port:PL03<1><default><default><1> ctp_power_ldo = ctp_power_ldo_vol = ctp_power_io = ;-------------------------------------------------------------------------------- ; CTP automatic detection configuration ;ctp_detect_used --- Whether startup automatic inspection function. 1:used,0:unused ;Module name postposition 1 said detection, 0 means no detection. ;-------------------------------------------------------------------------------- [ctp_list_para] ctp_det_used = 1 ft5x_ts = 1 gt82x = 1 gslX680 = 1 gslX680new = 0 gt9xx_ts = 1 gt9xxf_ts = 0 tu_ts = 0 gt818_ts = 1 zet622x = 1 aw5306_ts = 1 icn83xx_ts = 0 [motor_para] motor_used = 0 ;---------------------------------------------------------------------------------- ;lcd0 configuration ;lcd_if: 0:hv(sync+de); 1:8080; 2:ttl; 3:lvds; 4:dsi; 5:edp; 6:extend dsi ;lcd_x: lcd horizontal resolution ;lcd_y: lcd vertical resolution ;lcd_width: width of lcd in mm ;lcd_height: height of lcd in mm ;lcd_dclk_freq: in MHZ unit ;lcd_pwm_freq: in HZ unit ;lcd_pwm_pol: lcd backlight PWM polarity ;lcd_pwm_max_limit lcd backlight PWM max limit(<=255) ;lcd_hbp: hsync back porch ;lcd_ht: hsync total cycle ;lcd_vbp: vsync back porch ;lcd_vt: vysnc total cycle ;lcd_hspw: hsync plus width ;lcd_vspw: vysnc plus width ;lcd_lvds_if: 0:single link; 1:dual link ;lcd_lvds_colordepth: 0:8bit; 1:6bit ;lcd_lvds_mode: 0:NS mode; 1:JEIDA mode ;lcd_frm: 0:disable; 1:enable rgb666 dither; 2:enable rgb656 dither ;lcd_io_phase: 0:noraml; 1:intert phase(0~3bit: vsync phase; 4~7bit:hsync phase; ; 8~11bit:dclk phase; 12~15bit:de phase) ;lcd_gamma_en lcd gamma correction enable ;lcd_bright_curve_en lcd bright curve correction enable ;lcd_cmap_en lcd color map function enable ;deu_mode 0:smoll lcd screen; 1:large lcd screen(larger than 10inch) ;lcdgamma4iep: Smart Backlight parameter, lcd gamma vale * 10; ; decrease it while lcd is not bright enough; increase while lcd is too bright ;smart_color 90:normal lcd screen 65:retina lcd screen(9.7inch) ;---------------------------------------------------------------------------------- [lcd0_para] lcd_used = 1 lcd_driver_name = "default_lcd" lcd_if = 3 lcd_x = 1280 lcd_y = 800 lcd_width = 150 lcd_height = 94 lcd_dclk_freq = 71 lcd_pwm_used = 1 lcd_pwm_ch = 0 lcd_pwm_freq = 50000 lcd_pwm_pol = 1 lcd_hbp = 20 lcd_ht = 1418 lcd_hspw = 10 lcd_vbp = 10 lcd_vt = 830 lcd_vspw = 5 lcd_lvds_if = 0 lcd_lvds_colordepth = 1 lcd_lvds_mode = 0 lcd_frm = 1 lcd_gamma_en = 0 lcd_bright_curve_en = 0 lcd_cmap_en = 0 deu_mode = 0 lcdgamma4iep = 22 smart_color = 90 lcd_bl_en = port:PD13<1><0><default><1> ;ap6xxx_wl_regon = port:PL06<1><default><default><0> ;lcd_bl_en = port:PL06<1><0><default><1> lcd_power = "axp22_dc1sw" lcdd0 = port:PD18<3><0><default><default> lcdd1 = port:PD19<3><0><default><default> lcdd2 = port:PD20<3><0><default><default> lcdd3 = port:PD21<3><0><default><default> lcdd4 = port:PD22<3><0><default><default> lcdd5 = port:PD23<3><0><default><default> lcdd6 = port:PD24<3><0><default><default> lcdd7 = port:PD25<3><0><default><default> lcdd8 = port:PD26<3><0><default><default> lcdd9 = port:PD27<3><0><default><default> ;---------------------------------------------------------------------------------- ;pwm config ;---------------------------------------------------------------------------------- [pwm0_para] pwm_used = 0 pwm_positive = port:PH00<2><0><default><default> [pwm1_para] pwm_used = 1 pwm_positive = port:PH01<2><0><default><default> [usbc0] usb_used = 1 usb_port_type = 2 usb_detect_type = 1 usb_id_gpio = port:PD10<0><1><default><default> usb_det_vbus_gpio = "axp_ctrl" usb_drv_vbus_gpio = port:power4<1><0><default><0> usb_restrict_gpio = usb_host_init_state = 0 usb_restric_flag = 0 usb_restric_voltage = 3550000 usb_restric_capacity= 5 usb_regulator_io = "nocare" usb_regulator_vol = 0 usb_regulator_id_vbus = "axp22_dcdc1" usb_regulator_id_vbus_vol = 3000000 [usbc1] usb_used = 1 usb_drv_vbus_gpio = port:PD12<1><0><default><0> usb_restrict_gpio = usb_host_init_state = 1 usb_restric_flag = 0 usb_regulator_io = "nocare" usb_regulator_vol = 0 usb_not_suspend = 0 ;-------------------------------------------------------------------------------- ;wifi/bt/fm/gps/nfc modules configuration ;module_num: ; 0- none ; 1- ap6181(wifi) ; 2- ap6210(wifi+bt) ; 3- rtl8188eu(wifi) ; 4- rtl8723au(wifi+bt) ; 5- rtl8723bs(wifi+bt) ; 6- esp8089(wifi) ; 7- ap6476(wifi+bt+fm+gps) ; 8- rtl8189es(wifi) ; 9- ap6212(wifi+bt+fm) ; 10- ap6330(wifi+bt+fm) ; 11- gb9663(wifi+bt+fm) ;module_power1: ""- bat, "axp_dldo1"- axp dldo1 ;module_power1_vol: power1 voltage, mv; not used for module_power1 is "" ;module_power2: ""- bat, "axp_dldo2"- axp dldo2 ;module_power2_vol: power2 voltage, mv; not used for module_power2 is "" ;module_power3: ""- bat, "axp_dldo2"- axp dldo2 ;module_power3_vol: power3 voltage, mv; not used for module_power3 is "" ;power_switch: module power switch io when bat supply ;chip_en: enable chip io ;lpo_use_apclk: ""- not use, "losc_out"- a23/33, "ac10032k1"、"ac10032k2"、"ac10032k3"- a80/a83 ;-------------------------------------------------------------------------------- [rf_para] module_num = 1 module_power1 = "axp22_aldo1" module_power1_vol = 3000000 module_power2 = "" module_power2_vol = 3000000 module_power3 = "" module_power3_vol = 3000000 power_switch = chip_en = lpo_use_apclk = "losc_out" ;-------------------------------------------------------------------------------- ;wifi configuration ;wifi_used: 0-not use, 1- use ;wifi_sdc_id: 0- SDC0, 1- SDC1, 2- SDC2, 3- SDC3 ;wifi_usbc_id: 0- USB0, 1- USB1, 2- USB2 ;wifi_usbc_type: 1- EHCI(speed 2.0), 2- OHCI(speed 1.0) ;wl_reg_on: wifi function enable io ;wl_host_wake: wifi device wake-up host ;wl_host_wake_invert: whether wl_host_wake use inverter between ap and module ; 0: not used, 1: used ;-------------------------------------------------------------------------------- [wifi_para] wifi_used = 1 wifi_sdc_id = 1 wifi_usbc_id = 1 wifi_usbc_type = 1 wifi_mod_sel = 1 wifi_power = "" wifi_power_ext1 = "" wifi_power_ext2 = "" ; 1 - ap6181 sdio wifi gpio config ;ap6xxx_wl_regon = port:PL06<1><default><default><0> ;ap6xxx_wl_host_wake = port:PL07<4><default><default><0> ;ap6xxx_lpo_use_apclk = 1 ; 2 - ap6210 sdio wifi gpio config ap6xxx_wl_regon = port:PL06<1><default><default><0> ap6xxx_wl_host_wake = port:PL07<4><default><default><0> ;ap6xxx_bt_regon = port:PL08<1><default><default><0> ;ap6xxx_bt_wake = port:PL10<1><default><default><0> ;ap6xxx_bt_host_wake = port:PL09<4><default><default><0> ap6xxx_lpo_use_apclk = 1 ; 3 - rtl8188eu usb wifi gpio conifg ; 4 - rtl8723au usb wifi + bt ; 5 - rtl8723bs sdio wifi + bt ;rtl8723bs_chip_en = port:PL11<1><default><default><0> ;rtl8723bs_wl_regon = port:PL06<1><default><default><0> ;rtl8723bs_wl_host_wake = port:PL07<4><default><default><0> ;rtl8723bs_bt_regon = port:PL08<1><default><default><0> ;rtl8723bs_bt_wake = port:PL10<1><default><default><0> ;rtl8723bs_bt_host_wake = port:PL09<4><default><default><0> ;rtl8723bs_lpo_use_apclk = 0 ; 6 - eagle sdio wifi ;esp_wl_chip_en = port:PL03<1><default><default><0> ;esp_wl_rst = port:PL02<1><default><default><0> ; 7 - ap6476 sdio wifi gpio config ;ap6xxx_wl_regon = port:PL06<1><default><default><0> ;ap6xxx_wl_host_wake = port:PL07<4><default><default><0> ;ap6xxx_bt_regon = port:PL08<1><default><default><0> ;ap6xxx_bt_wake = port:PL10<1><default><default><0> ;ap6xxx_bt_host_wake = port:PL09<4><default><default><0> ;ap6xxx_lpo_use_apclk = 1 ; 8 - rtl8189es sdio wifi gpio conifg ;rtl8189es_shdn = port:PL06<1><default><default><0> ;rtl8189es_host_wake = port:PL07<4><default><default><0> usb_vbus_power_ctrl = port:PL11<1><default><default><1> usb_eth_power_ctrl = port:PL04<1><default><default><1> ;-------------------------------------------------------------------------------- ;bluetooth configuration ;bt_used: 0- no used, 1- used ;bt_uard_id: 0- uart0, 1- uart1, 2- uart2 ;bt_rst_n: bt function enable io ;bt_wake: host wake-up bluetooth device ;bt_wak_host: bt device wake-up host ;bt_wake_invert: whether bt_wake use inverter between ap and module ; 0: not used, 1: used ;bt_host_wake_invert: whether bt_host_wake use inverter between ap and module ; 0: not used, 1: used ;-------------------------------------------------------------------------------- [bt_para] bt_used = 0 bt_uart_id = 1 bt_rst_n = port:PL08<1><default><default><0> bt_wake = port:PL10<1><default><default><0> bt_host_wake = port:PL09<4><default><default><0> bt_wake_invert = 0 bt_host_wake_invert = 0 ls_int = port:PB07<1><default><default><0> pcm_ch = port:PB05<1><default><default><0> [gy_list_para] gy_det_used = 0 [ls_list_para] ls_det_used = 0 power_start = 3 pmu_temp_enable = 0
开发板使用:CB-A(需要外接+5V) 1、在lichee中初始化RGB屏幕:KD027QVTPD022 W:\liuxing_csdn_tinav2.1\lichee\linux-3.4\drivers\video\sunxi\lcd\panels\default_panel.c static void LCD_panel_init(u32 sel) { u32 i; //printk("raoyiming +++ LCD_panel_init\n"); /**/ panel_rst(1); sunxi_lcd_delay_ms(1); panel_rst(0); sunxi_lcd_delay_ms(10); panel_rst(1); sunxi_lcd_delay_ms(120); return; } W:\liuxing_csdn_tinav2.1\lichee\linux-3.4\drivers\video\sunxi\lcd\panels\default_panel.h #define panel_rst(v) (sunxi_lcd_gpio_set_value(0, 0, v)) 第二个0是sys_config.fex中lcd_gpio_0 lcd_gpio_0 = port:PH07<1><0><default><0> 2、 W:\liuxing_csdn_tinav2.1\target\allwinner\astar-parrot\configs\sys_config.fex 生成的SPI的设备名: ;---------------------------------------------------------------------------------- ;[spi_board0] spi device configuration ;modalias = spi device name ;sflash_size = spi flash size, optional, if spi_board0 is nor flash , carefully ;max_speed_hz = max transfer speed ;bus_num = bus ID ;chip_select = chip select, 0,1 ;mode = SPI transfer mode ;---------------------------------------------------------------------------------- [spi_board0] ;modalias = "at25df641" modalias = "spidev" sflash_size = 32 max_speed_hz = 50000000 bus_num = 0 chip_select = 0 mode = 0 加入RGB的屏幕参数(如果希望调优请找模组厂协助): ;---------------------------------------------------------------------------------- ;lcd0 configuration ;lcd_if: 0:hv(sync+de); 1:8080; 2:ttl; 3:lvds; 4:dsi; 5:edp; 6:extend dsi ;lcd_x: lcd horizontal resolution ;lcd_y: lcd vertical resolution ;lcd_width: width of lcd in mm ;lcd_height: height of lcd in mm ;lcd_dclk_freq: in MHZ unit ;lcd_pwm_freq: in HZ unit ;lcd_pwm_pol: lcd backlight PWM polarity ;lcd_pwm_max_limit lcd backlight PWM max limit(<=255) ;lcd_hbp: hsync back porch ;lcd_ht: hsync total cycle ;lcd_vbp: vsync back porch ;lcd_vt: vysnc total cycle ;lcd_hspw: hsync plus width ;lcd_vspw: vysnc plus width ;lcd_lvds_if: 0:single link; 1:dual link ;lcd_lvds_colordepth: 0:8bit; 1:6bit ;lcd_lvds_mode: 0:NS mode; 1:JEIDA mode ;lcd_frm: 0:disable; 1:enable rgb666 dither; 2:enable rgb656 dither ;lcd_io_phase: 0:noraml; 1:intert phase(0~3bit: vsync phase; 4~7bit:hsync phase; ; 8~11bit:dclk phase; 12~15bit:de phase) ;lcd_gamma_en lcd gamma correction enable ;lcd_bright_curve_en lcd bright curve correction enable ;lcd_cmap_en lcd color map function enable ;deu_mode 0:smoll lcd screen; 1:large lcd screen(larger than 10inch) ;lcdgamma4iep: Smart Backlight parameter, lcd gamma vale * 10; ; decrease it while lcd is not bright enough; increase while lcd is too bright ;smart_color 90:normal lcd screen 65:retina lcd screen(9.7inch) ;---------------------------------------------------------------------------------- [lcd0_para] lcd_used = 1 lcd_driver_name = "default_lcd" lcd_if = 0 lcd_x = 320 lcd_y = 240 lcd_width = 0 lcd_height = 0 lcd_dclk_freq = 5 lcd_pwm_used = 1 lcd_pwm_ch = 0 lcd_pwm_freq = 50000 lcd_pwm_pol = 1 lcd_hbp = 60 lcd_ht = 390 lcd_hspw = 6 lcd_vbp = 6 lcd_vt = 250 lcd_vspw = 2 lcd_lvds_if = 0 lcd_lvds_colordepth = 0 lcd_lvds_mode = 0 lcd_frm = 1 lcd_gamma_en = 0 lcd_bright_curve_en = 0 lcd_cmap_en = 0 deu_mode = 0 lcdgamma4iep = 22 smart_color = 90 lcd_bl_en = port:PD13<1><0><default><1> lcd_power = "axp22_dc1sw" lcd_gpio_0 = port:PH07<1><0><default><0> lcd_gpio_1 = port:PL04<1><0><default><0> lcd_gpio_2 = port:PL11<1><0><default><1> ;lcdd0 = port:PD00<2><0><2><default> ;lcdd1 = port:PD01<2><0><2><default> lcdd2 = port:PD02<2><0><2><default> lcdd3 = port:PD03<2><0><2><default> lcdd4 = port:PD04<2><0><2><default> lcdd5 = port:PD05<2><0><2><default> lcdd6 = port:PD06<2><0><2><default> lcdd7 = port:PD07<2><0><2><default> ;lcdd8 = port:PD08<2><0><2><default> ;lcdd9 = port:PD09<2><0><2><default> lcdd10 = port:PD10<2><0><2><default> lcdd11 = port:PD11<2><0><2><default> lcdd12 = port:PD12<2><0><2><default> lcdd13 = port:PD13<2><0><2><default> lcdd14 = port:PD14<2><0><2><default> lcdd15 = port:PD15<2><0><2><default> ;lcdd16 = port:PD16<2><0><2><default> ;lcdd17 = port:PD17<2><0><2><default> lcdd18 = port:PD18<2><0><2><default> lcdd19 = port:PD19<2><0><2><default> lcdd20 = port:PD20<2><0><2><default> lcdd21 = port:PD21<2><0><2><default> lcdd22 = port:PD22<2><0><2><default> lcdd23 = port:PD23<2><0><2><default> lcdclk = port:PD24<2><0><3><default> lcdde = port:PD25<2><0><2><default> lcdhsync = port:PD26<2><0><2><default> lcdvsync = port:PD27<2><0><2><default> 3、原理:生成设备节点:/dev/spidev0.0。然后通用C格式的应用程序访问这个设备节点来初始化LCD。 编译刷机之后: 开机之后背光是亮的(背光被强制拉高了) root@TinaLinux:/# root@TinaLinux:/# find . -name spi* ./bin/spidev_test0 ./dev/spidev0.0 ./proc/irq/97/spi0 ./rom/bin/spidev_test0 ./rom/usr/lib/opkg/info/spidev_test0.control ./rom/usr/lib/opkg/info/spidev_test0.list ./sys/bus/spi ./sys/bus/spi/devices/spi0.0 ./sys/bus/spi/drivers/spidev ./sys/bus/spi/drivers/spidev/spi0.0 ./sys/bus/platform/devices/spi.0 ./sys/bus/platform/drivers/spi ./sys/bus/platform/drivers/spi/spi.0 ./sys/devices/platform/spi.0 ./sys/devices/platform/spi.0/spi_master ./sys/devices/platform/spi.0/spi_master/spi0 ./sys/devices/platform/spi.0/spi_master/spi0/spi0.0 ./sys/devices/platform/spi.0/spi_master/spi0/spi0.0/spidev ./sys/devices/platform/spi.0/spi_master/spi0/spi0.0/spidev/spidev0.0 ./sys/class/spi_master ./sys/class/spi_master/spi0 ./sys/class/spidev ./sys/class/spidev/spidev0.0 ./sys/kernel/debug/clk/hosc/pll_periph/pll_periphahb1/ahb1/spinlock ./sys/kernel/debug/clk/hosc/pll_periph/spi0 ./sys/kernel/debug/clk/hosc/spi1 ./sys/module/spidev ./usr/lib/opkg/info/spidev_test0.control ./usr/lib/opkg/info/spidev_test0.list root@TinaLinux:/# root@TinaLinux:/# (初始化屏幕之后是全绿:) root@TinaLinux:/# spidev_test0 spi mode: 0 bits per word: 8 max speed: 500000 Hz (500 KHz) send spi message success! root@TinaLinux:/# root@TinaLinux:/# (红绿蓝单色和一张静态图片的切换) root@TinaLinux:/# root@TinaLinux:/# root@TinaLinux:/# cb_test [ 203.906264] request_suspend_state: wakeup (0->0) at 203906241807 (1970-01-01 08:41:09.853073511 UTC) fb0 begining readCnt = 1 ****wyb 2017/7/3 9:36 x = 320 y = 240 bytes_per_pixel = 4 screensize = 307200 ----- RED 0 ----- GREEN ----- BLUE ----- RED 1 ----- GREEN ----- BLUE ^C root@TinaLinux:/# (绿红黑等单色循环测试) root@TinaLinux:/# root@TinaLinux:/# root@TinaLinux:/# fbtest **** wyb fbtest.c-391-main argc=1 **** wyb fbtest.c-453-main argc2=1 **** wyb fbtest.c-462-main opening framebuffer device success! **** wyb fbtest.c-471-main getting fix screeninfo success! **** wyb fbtest.c-480-main getting var screeninfo success! **** wyb fbtest.c-489-main setting mode success! **** wyb fbtest.c-498-main mmap'ing framebuffer device success! testing: ARGB for sizes: 320x240 ^C root@TinaLinux:/# root@TinaLinux:/# 4、改进方向: W:\liuxing_csdn_tinav2.1\lichee\linux-3.4\drivers\video\sunxi\lcd\panels\default_panel.c 在驱动中增加SPI初始化部分,然后还可以让开机自动进入红绿蓝的测试程序!
全志R16调通USB接口的WIFI:RTL8188CUv1.0版本.txt 2017/4/5 16:56 开发板:SC3817R OS/SDK:Android4.4.2/ParrotV1.1 测试步骤/请眼中注意:打开WIFI之前必须将 USB接口的WIFI:RTL8188CU插入到USB1中去,否则会死机!!!!切记! 1、(如果SDK没有编译过,请跳过本次执行步骤!!!!) rootroot@cm-System-Product-Name:/home/wwt/rtl8188eu_parrotv1.1$ cd lichee/ rootroot@cm-System-Product-Name:/home/wwt/rtl8188eu_parrotv1.1/lichee$ ./build.sh config Welcome to mkscript setup progress All available chips: 0. sun8iw5p1 Choice: 0 All available platforms: 0. android 1. dragonboard 2. linux 3. tina Choice: 0 All available kernel: 0. linux-3.4 Choice: 0 All available boards: 0. bell-one 1. evb 2. evb-20 3. evb-30 4. evb-rtl8723bs 5. sc3813r Choice: 3 rootroot@cm-System-Product-Name:/home/wwt/rtl8188eu_parrotv1.1/lichee$ cd linux-3.4/ rootroot@cm-System-Product-Name:/home/wwt/rtl8188eu_parrotv1.1/lichee/linux-3.4$ make ARCH=arm menuconfig Device Drivers ---> [*] Network device support ---> [*] Wireless LAN ---> (其它的可以全部关闭的!!!!) <M> Realtek 8188E USB WiFi 2、 Z:\home\wwt\rtl8188eu_parrotv1.1\android\device\softwinner\astar-evb30\BoardConfig.mk 关闭这里: #BOARD_WIFI_VENDOR := broadcom 打开这里: # wifi and bt configuration # 1. Wifi Configuration # 1.1 realtek wifi support # 1.1 realtek wifi configuration BOARD_WIFI_VENDOR := realtek ifeq ($(BOARD_WIFI_VENDOR), realtek) WPA_SUPPLICANT_VERSION := VER_0_8_X BOARD_WPA_SUPPLICANT_DRIVER := NL80211 BOARD_WPA_SUPPLICANT_PRIVATE_LIB := lib_driver_cmd_rtl BOARD_HOSTAPD_DRIVER := NL80211 BOARD_HOSTAPD_PRIVATE_LIB := lib_driver_cmd_rtl SW_BOARD_USR_WIFI := rtl8188eu BOARD_WLAN_DEVICE := rtl8188eu #SW_BOARD_USR_WIFI := rtl8189es #BOARD_WLAN_DEVICE := rtl8189es #SW_BOARD_USR_WIFI := rtl8723bs #BOARD_WLAN_DEVICE := rtl8723bs endif 3、 Z:\home\wwt\rtl8188eu_parrotv1.1\android\device\softwinner\astar-evb30\init.sun8i.rc 关闭这里: #insmod /system/vendor/modules/bcm_btlpm.ko ## bluetooth # # UART device # chmod 0660 /dev/ttyS1 # chown bluetooth net_bt_stack /dev/ttyS1 # # # power up/down interface # chmod 0660 /sys/class/rfkill/rfkill0/state # chmod 0660 /sys/class/rfkill/rfkill0/type # chown bluetooth net_bt_stack /sys/class/rfkill/rfkill0/state # chown bluetooth net_bt_stack /sys/class/rfkill/rfkill0/type # write /sys/class/rfkill/rfkill0/state 0 # # # bluetooth LPM # chmod 0220 /proc/bluetooth/sleep/lpm # chmod 0220 /proc/bluetooth/sleep/btwrite # chown bluetooth net_bt_stack /proc/bluetooth/sleep/lpm # chown bluetooth net_bt_stack /proc/bluetooth/sleep/btwrite ## 2. broadcom wifi service ## 2.1 broadcom wifi station and softap #service wpa_supplicant /system/bin/wpa_supplicant \ # -iwlan0 -Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf \ # -I/system/etc/wifi/wpa_supplicant_overlay.conf \ # -O/data/misc/wifi/sockets \ # -e/data/misc/wifi/entropy.bin -g@android:wpa_wlan0 # # we will start as root and wpa_supplicant will switch to user wifi # # after setting up the capabilities required for WEXT # # user wifi # # group wifi inet keystore # class main # socket wpa_wlan0 dgram 660 wifi wifi # disabled # oneshot # ## 2.2 broadcom wifi sta p2p concurrent service #service p2p_supplicant /system/bin/wpa_supplicant \ # -iwlan0 -Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf \ # -I/system/etc/wifi/wpa_supplicant_overlay.conf \ # -O/data/misc/wifi/sockets -N \ # -ip2p0 -Dnl80211 -c/data/misc/wifi/p2p_supplicant.conf \ # -I/system/etc/wifi/p2p_supplicant_overlay.conf \ # -puse_p2p_group_interface=1 -e/data/misc/wifi/entropy.bin \ # -g@android:wpa_wlan0 # # we will start as root and wpa_supplicant will switch to user wifi # # after setting up the capabilities required for WEXT # # user wifi # # group wifi inet keystore # class main # socket wpa_wlan0 dgram 660 wifi wifi # disabled # oneshot 打开这里: # 1. realtek & eagle wifi service # 1.1 realtek & eagle wifi sta service service wpa_supplicant /system/bin/logwrapper /system/bin/wpa_supplicant \ -iwlan0 -Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf \ -O/data/misc/wifi/sockets \ -e/data/misc/wifi/entropy.bin -g@android:wpa_wlan0 # we will start as root and wpa_supplicant will switch to user wifi # after setting up the capabilities required for WEXT # user wifi # group wifi inet keystore class main socket wpa_wlan0 dgram 660 wifi wifi disabled oneshot # 1.2 realtek & eagle wifi sta p2p concurrent service service p2p_supplicant /system/bin/logwrapper /system/bin/wpa_supplicant \ -ip2p0 -Dnl80211 -c/data/misc/wifi/p2p_supplicant.conf \ -e/data/misc/wifi/entropy.bin -N \ -iwlan0 -Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf \ -O/data/misc/wifi/sockets \ -g@android:wpa_wlan0 class main socket wpa_wlan0 dgram 660 wifi wifi disabled oneshot #rtl8189es cob set macaddr #service engsetmacaddr /system/bin/setmacaddr /data/wifimac.txt # class main # oneshot 4、 Z:\home\wwt\rtl8188eu_parrotv1.1\android\device\softwinner\astar-evb30\astar_evb30.mk 关闭这里: # wifi features PRODUCT_COPY_FILES += \ frameworks/native/data/etc/android.hardware.wifi.xml:system/etc/permissions/android.hardware.wifi.xml \ frameworks/native/data/etc/android.hardware.wifi.direct.xml:system/etc/permissions/android.hardware.wifi.direct.xml #frameworks/native/data/etc/android.hardware.bluetooth.xml:system/etc/permissions/android.hardware.bluetooth.xml \ #frameworks/native/data/etc/android.hardware.bluetooth_le.xml:system/etc/permissions/android.hardware.bluetooth_le.xml # ap6181/6210/6330 sdio wifi fw and nvram #$(call inherit-product-if-exists, hardware/broadcom/wlan/firmware/ap6181/device-bcm.mk) #$(call inherit-product-if-exists, hardware/broadcom/wlan/firmware/ap6212/device-bcm.mk) #$(call inherit-product-if-exists, hardware/broadcom/wlan/firmware/ap6330/device-bcm.mk) #PRODUCT_PACKAGES += bt_vendor.conf \ # libbt-client-api \ # com.broadcom.bt \ # com.broadcom.bt.xml \ # com.dsi.ant.antradio_library \ # com.dsi.ant.antradio_library.xml \ # AntHalService \ # ANTRadioService PRODUCT_PACKAGES += com.dsi.ant.antradio_library \ com.dsi.ant.antradio_library.xml \ AntHalService \ ANTRadioService #PRODUCT_PACKAGES += Bluetooth 5、 Z:\home\wwt\rtl8188eu_parrotv1.1\android\device\softwinner\astar-evb30\overlay\frameworks\base\core\res\res\values\config.xml 关闭这里: <!-- List of regexpressions describing the interface (if any) that represent tetherable bluetooth interfaces. If the device doesn't want to support tethering over bluetooth this should be empty. --> <!-- default: disable Bluetooth PAN feature --> <string-array translatable="false" name="config_tether_bluetooth_regexs"> <item>"bt-pan"</item> </string-array> Z:\home\wwt\rtl8188eu_parrotv1.1\lichee\tools\pack\chips\sun8iw5p1\configs\evb-30\sys_config.fex 关闭这里: [wakeup_src_para] cpu_en = 0 cpu_freq = 48 ; (cpu:apb:ahb) pll_ratio = 0x111 dram_selfresh_en= 1 dram_freq = 36 wakeup_src_wl = port:PL07<4><default><default><0> ;wakeup_src_bt = port:PL09<4><default><default><0> bb_wake_ap = port:PL02<4><default><default><0> [usbc1] usb_used = 1 usb_drv_vbus_gpio = port:PD12<1><0><default><0> usb_restrict_gpio = usb_host_init_state = 0 usb_restric_flag = 0 usb_regulator_io = "nocare" usb_regulator_vol = 0 usb_not_suspend = 0 [rf_para] module_num = 3 module_power1 = "axp22_dldo1" module_power1_vol = 3300000 module_power2 = "axp22_dldo2" module_power2_vol = 3300000 module_power3 = "axp22_aldo1" module_power3_vol = 3300000 power_switch = chip_en = lpo_use_apclk = "losc_out" [bt_para] bt_used = 0 ;bt_uart_id = 1 ;bt_rst_n = port:PL08<1><default><default><0> ;bt_wake = port:PL10<1><default><default><0> ;bt_host_wake = port:PL09<4><default><default><0> ;bt_host_wake_invert = 0

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿基米东

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值