欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
【轉】Android系統之Broadcom GPS 移植

1.      內核部分的移植:

內核部分的移植基本上就是對芯片上下電,建立數據結構體,打通GPS通信的串口通道,以及建立文件設備結點(diǎn)供上層調用。所建立的文件結點(diǎn)是針對Power_enable和Reset兩個(gè)腳。

在板載文件board-msm7x30.c里需要做的任務(wù):

static void msm7x30_init_gps(void)

{

 …

       vreg_l2 = vreg_get(NULL, "xo_out");    

       ret = vreg_set_level(vreg_l2, 2600);

       ret = vreg_enable(vreg_l2);

              給芯片上電的電壓為2.6V。

       vreg_l13 = vreg_get(NULL, "wlan");

       ret = vreg_set_level(vreg_l13, 1800);

       ret = vreg_enable(vreg_l13);

              給芯片另外一個(gè)腳上電為1.8V。

}

除了以上兩個(gè)引腳的上電以為,還有另外兩個(gè)比較重要的引腳gps_poweron和gps_reset初始化的上電時(shí)序。如下:

int gps_power_init(void)

{

       gps_reset_level(0); //reset off

       mdelay(200);

       gps_reset_level(1); //reset on

       mdelay(200);

       gps_standby_level(0); //standby off

       return 0;

}

前面是對芯片的上電的完成,下面需要對GPS通道的UART進(jìn)行配置。由于Uart驅動(dòng)是比較成熟的驅動(dòng),所以只需要把uart3的資源加進(jìn)驅動(dòng)里面去就OK了。如下:

struct platform_device *devices[]__initdata = {

 …

 &msm_device_uart3;

 …

 }

以上板載里的添加就算完成了。

 

下面是對gps_poweron和gps_reset這兩個(gè)引腳完成文件結點(diǎn)的驅動(dòng),來(lái)提供給上層操作:

這部分的驅動(dòng)在kernel/drivers/gpio/gps-gpio.c文件中。


#include <linux/sysdev.h>
#include <linux/errno.h>
#include <linux/io.h>
#include <linux/device.h>
#include <mach/gpio.h>
#include <linux/platform_device.h>
#include <linux/gpio_gps.h>
#include <asm/uaccess.h>
#include <mach/hardware.h>
#include <linux/device.h>

static ssize_t gps_standby_show(struct device *dev,
                struct device_attribute *attr, char *buf)
{
        int len = 0;
        struct gps_gpio_platform_data *pdata = dev->platform_data;

        len += sprintf(buf + len, "%u\n", pdata->standby_state);
        printk("======== %s len = %d\n",__func__,len);
        return len;
}

static ssize_t gps_standby_store(struct device *dev,
                struct device_attribute *attr, const char *buf, size_t size)
{
        unsigned long state = simple_strtoul(buf, NULL, 10);
        struct gps_gpio_platform_data *pdata = dev->platform_data;

        pdata->standby_state = (int)state;
        printk("\n ****** standby_state = %d \n",pdata->standby_state);

        if(state)
                pdata->gps_standby_level(1); //standby on
        else
                pdata->gps_standby_level(0); //standby off

        return size;
}

static ssize_t gps_reset_show(struct device *dev,
                struct device_attribute *attr, char *buf)
{
        int len = 0;
        struct gps_gpio_platform_data *pdata = dev->platform_data;


        len += sprintf(buf + len, "%u\n", pdata->reset_state);
        printk("======== %s len = %d\n",__func__,len);


        return len;
}

static ssize_t gps_reset_store(struct device *dev,
                struct device_attribute *attr, const char *buf, size_t size)
{
        unsigned long state = simple_strtoul(buf, NULL, 10);
        struct gps_gpio_platform_data *pdata = dev->platform_data;
        printk("\n ******%s  %s  line = %d \n",__func__,__FILE__,__LINE__);

        pdata->reset_state = (int)state;
        printk("\n ****** reset_state = %d \n",pdata->reset_state);

        if(state)
                pdata->gps_reset_level(1); //reset on
        else

                pdata->gps_reset_level(0); //reset off

        return size;
}

static DEVICE_ATTR(GPS_nRST, 0644, gps_reset_show, gps_reset_store);
static DEVICE_ATTR(GPS_PWR_EN, 0644, gps_standby_show, gps_standby_store);

static int gps_gpio_probe(struct platform_device *pdev)
{
    int ret;
    struct gps_gpio_platform_data *pdata = pdev->dev.platform_data;

    pdata->standby_state = 0;
    pdata->reset_state = 1;
    pdata->gps_power_init();
    ret = device_create_file(&pdev->dev, &dev_attr_GPS_nRST);
    //    ret = device_create_file(&pdev->dev, &GPS_PWR_EN);
    printk("http://////   ret  = %d \n",ret);
    if(ret)
        return ret;
    else
        return device_create_file(&pdev->dev, &dev_attr_GPS_PWR_EN);

}

static int gps_gpio_remove(struct platform_device *pdev)
{
    struct gps_gpio_platform_data *pdata = pdev->dev.platform_data;
    pdata->gps_reset_level(0);
    pdata->gps_standby_level(0);

    return 0;
}

struct platform_driver gps_gpio_driver = {
    .probe = gps_gpio_probe,
    .remove = gps_gpio_remove,
    .driver = {
        .name   = "gps_gpio",
        .owner  = THIS_MODULE,
    },
};

static int __init gps_gpio_init(void)
{
    return platform_driver_register(&gps_gpio_driver);
}


static void __exit  gps_gpio_exit(void)
{
    platform_driver_unregister(&gps_gpio_driver);
}

late_initcall(gps_gpio_init);
module_exit(gps_gpio_exit);

MODULE_AUTHOR("zhangmin");
MODULE_LICENSE("GPL v2");


這里怎么實(shí)現就不詳說(shuō)了,看到代碼了應該很好懂。

這樣GPS在內核的工作基本上就完成了。

 

2.      GPS硬件抽象層的移植

所有的工作在hardware/broadcom/gps/目錄中完成。

首先把broadcom的代碼拿過(guò)來(lái)解壓,直接把解壓后的文件夾放在hardware/broadcom/gps/目錄下。

①    創(chuàng )建一個(gè)Android.mk 里面的內容如下:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

 

LOCAL_SRC_FILES := libgll.a

LOCAL_MODULE := libgll

LOCAL_MODULE_CLASS := STATIC_LIBRARIES

LOCAL_MODULE_TAGS := user

LOCAL_MODULE_SUFFIX := .a

include $(BUILD_PREBUILT)

include $(CLEAR_VARS)

LOCAL_SRC_FILES := libglnet.a

LOCAL_MODULE := libglnet

LOCAL_MODULE_CLASS := STATIC_LIBRARIES

LOCAL_MODULE_TAGS := user

LOCAL_MODULE_SUFFIX := .a

include $(BUILD_PREBUILT)

②    然后把Android.mk放在目錄/prebuilt/android-arm/gps/下。

③ 然后把broadcom提供的libgll.a 和 libglnet.a文件也直接拷在目錄/prebuilt/android-arm/gps/下。

④    創(chuàng )建一個(gè)buildspec.mk文件,內容如下:

TARGET_ARCH_VARIANT:=armv7-a

SHOW_COMMANDS:=y

CONFIG_HAL_SERIAL_TYPE=UART

CONFIG_HAL_SERIAL_DEV=/dev/ttyS0

CONFIG_HAL_CMD=yes

CONFIG_HAL_CMD_FILE=/cache/glgpsctrl

CONFIG_HAL_LTO=yes

CONFIG_HAL_LTO_DIR=/data/gps/

CONFIG_HAL_LTO_FILE=lto.dat

CONFIG_HAL_NMEA_PIPE=yes

CONFIG_HAL_NMEA_FILE=/cache/gpspipe

CONFIG_HAL_NV=yes

CONFIG_HAL_NV_DIR=/data/gps/

CONFIG_HAL_NV_FILE=gldata.sto

CONFIG_HAL_RRC=no

CONFIG_HAL_GPIO_SYSFS=yes

CONFIG_HAL_CATCH_SIGNALS=yes

CONFIG_HAL_EE_DIR=./gps/

CONFIG_HAL_EE_FILE=cbee.cbee

CONFIG_HAL_LCS_API=yes

#CONFIG_HAL_LOG_ANDROID=yes

CONFIG_HAL_TIME_MONOTONIC=yes

 

CONFIG_HAL_SUPL=true

ENABLE_TLS=yes

 

然后把它放在hardware/broadcom/gps/目錄下。

⑤    將broadcom提供的glconfig.xml文件放在frameworks/base/data/etc/目錄下。

⑥    然后在frameworks/base/data/etc/目錄下的Android.mk中添加以下幾行:

include $(CLEAR_VARS)

LOCAL_MODULE := glconfig.xml

LOCAL_MODULE_TAGS := user eng

LOCAL_MODULE_CLASS := ETC

# This will install the file in /system/etc

LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)

LOCAL_SRC_FILES := $(LOCAL_MODULE)

include $(BUILD_PREBUILT)

 

這樣硬件抽象層的內容也移植完了。

通過(guò)這兩部的移植,基本上GPS就可以正常的工作了。

 

如何檢查GPS已經(jīng)移植可以使用了呢?首先查看編譯出來(lái)后在/system/bin/下是否生成了glgps這個(gè)可執行文件。

然后用命令來(lái)測試下:

glgps –c /system/etc/glconfig.xml Periodic

這樣把機器放在空曠的地方測試就會(huì )在機器的/data/gps/log/目錄下生成NEMA數據。

最后再用gpstest.apk來(lái)測試確認下是否真的搜到星定到位了。

 

整個(gè)GPS驅動(dòng)相對來(lái)說(shuō)比較簡(jiǎn)單,因為廠(chǎng)商基本上已經(jīng)封裝的很好,如果遇到問(wèn)題可以直接聯(lián)系FAE一起討論。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
LED驅動(dòng)(輪詢(xún)方式)在FL2440的開(kāi)發(fā)(2.6.33.7內核)
spi子系統分析
platform驅動(dòng)編寫(xiě) 基于gpio-keys
linux gpio模擬i2c的使用/用GPIO模擬I2C總線(xiàn)
gpio-key驅動(dòng)分析
Linux i2c子系統(四) _從i2c-s3c24xx.c看i2c控制器驅動(dòng)的編寫(xiě)
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久