ini.qcom.usb.rc

2024-05-15 01:18
文章标签 usb ini rc qcom

本文主要是介绍ini.qcom.usb.rc,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

blog.chinaunix.net/uid-25909619-id-3391322.html


分类: LINUX

下面是代码的设置流程:
//在init.c中
int main(int argc, char **argv)
{
     ......................
    INFO("reading config file\n");
    init_parse_config_file("/init.rc");

    /* pull the kernel commandline and ramdisk properties file in */
    import_kernel_cmdline(0, import_kernel_nv);//取出从boot传递过来的命令行参数
    /* don't expose the raw commandline to nonpriv processes */
    chmod("/proc/cmdline", 0440);
     ...................
    queue_builtin_action(set_init_properties_action, "set_init_properties");//保存参数到属性中
     ................
    return 0;
}

//跟踪该函数
void import_kernel_cmdline(int in_qemu, void (*import_kernel_nv)(char *name, int in_qemu))
{
    char cmdline[1024];
    char *ptr;
    int fd;

     //从虚拟文件系统中取参数
    fd = open("/proc/cmdline", O_RDONLY);
    if (fd >= 0) {
        int n = read(fd, cmdline, 1023);
        if (n < 0) n = 0;

        /* get rid of trailing newline, it happens */
        if (n > 0 && cmdline[n-1] == '\n') n--;

        cmdline[n] = 0;
        close(fd);
    } else {
        cmdline[0] = 0;
    }

    ptr = cmdline;
    while (ptr && *ptr) {
        char *x = strchr(ptr, ' ');//找到下一个参数位置
        if (x != 0) *x++ = 0;
        import_kernel_nv(ptr, in_qemu);//解析
        ptr = x;//下一个要解析参数的位置
    }
}

//调用函数指针
static void import_kernel_nv(char *name, int in_qemu)
{
    char *value = strchr(name, '=');

    if (value == 0) return;
    *value++ = 0;//把“=”替换成终结符
    if (*name == 0) return;

    if (!in_qemu)//在实际应用中走该分支
    {
        /* on a real device, white-list the kernel options */
        if (!strcmp(name,"qemu")) {
            strlcpy(qemu, value, sizeof(qemu));
        } else if (!strcmp(name,"androidboot.console")) {
            strlcpy(console, value, sizeof(console));
        } else if (!strcmp(name,"androidboot.mode")) {
            strlcpy(bootmode, value, sizeof(bootmode));
        } else if (!strcmp(name,"androidboot.serialno")) {//比较名字
            strlcpy(serialno, value, sizeof(serialno));//取出usb串号的值
        }
     .......
    } else {
        /* in the emulator, export any kernel option with the
         * ro.kernel. prefix */
        char  buff[32];
        int   len = snprintf( buff, sizeof(buff), "ro.kernel.%s", name );
        if (len < (int)sizeof(buff)) {
            property_set( buff, value );
        }
    }
}

//保存传递的值到属性中
static int set_init_properties_action(int nargs, char **args)
{
    ...................
    property_set("ro.serialno", serialno[0] ? serialno : "");
     ............
    return 0;
}

//在system/core/rootdir/etc/init.qcom.usb.sh中设置如下:
serialno=`getprop persist.usb.serialno`//如果persist.usb.serialno为空,则用传递过来的
case "$serialno" in
    "")
    serialnum=`getprop ro.serialno`//取出环境变量的值
    case "$serialnum" in
        "");; #Do nothing, use default serial number
        *)
        echo "$serialnum" > /sys/class/android_usb/android0/iSerial//写入到kernel中
    esac
    ;;
    * )
    echo "$serialno" > /sys/class/android_usb/android0/iSerial
esac

//在system/core/rootdir/etc/init.qcom.usb.rc设置vid,pid时位置代码如下:
on property:sys.usb.config=rndis,diag,adb
    write /sys/class/android_usb/android0/enable 0
    write /sys/class/android_usb/android0/idVendor 05C6//设置vid
    write /sys/class/android_usb/android0/idProduct 902D//设置pid
    write /sys/class/android_usb/android0/f_diag/clients diag
    write /sys/class/android_usb/android0/functions rndis,diag,adb//打开对应的功能
    write /sys/class/android_usb/android0/enable 1
    start adbd
    setprop sys.usb.state $sys.usb.config

这篇关于ini.qcom.usb.rc的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/990395

相关文章

Usb Audio Device Descriptor(10) Hid Device

对于 Standard Interface Descriptor, 当 bInterfaceClass=0x03时,即为HID设备。Standard Interface Descriptor如下 struct usb_standard_interface_descriptor{U8 bLength; /*Size of this descriptor in bytes*/U8 bDescrip

Android rk3399 UAC(USB Audio)开发笔记

一、UAC有1.0和2.0,因Windows对2.0支持不好,我使用的是UAC1.0驱动 内核配置:CONFIG_USB_CONFIGFS_F_UAC1          ---这个宏配置无需物理codec,使用虚拟 alsa codec  驱动路径:"kernel\drivers\usb\gadget\function\f_uac1.c" 内核配置:CONFIG_USB_CONFIGFS_

多款式随身WiFi如何挑选,USB随身WiFi、无线电池随身WiFi、充电宝随身WiFi哪个好?优缺点分析!

市面上的随身WiFi款式多样琳琅满目,最具代表性的就是USB插电款、无线款和充电宝款。今天就来用一篇文章分析一下这三种款式的优缺点。 USB插电款 优点:便宜,无需充电,在有电源的地方可以随时随地插电使用,比如中兴的USB随身WiFi。 缺点:无电源的情况下,无法带出门使用,部分品牌考虑到这个问题,会配备一个充电仓,这个充电仓相对来说就有点累赘了。网速上也不太稳定,波动比较大。

基于FPGA的开源项目:FOC/SHA/USB/JPEG等

文章目录 [1. USB 1.1控制器](https://github.com/WangXuan95/FPGA-USB-Device)[2. FOC控制算法](https://github.com/WangXuan95/FPGA-FOC)[3. BSV高级硬件描述语言入门指南](https://github.com/WangXuan95/BSV_Tutorial_cn)[4. 基于XDMA的

Circuit Design RC 震荡电路

为了测试一个信号放大器,手边又没有合适的信号发生器,所以就需要自己手动来一个信号发生器。。。。。由于所需的频率大概也不会太高,手边也没有电感,所以选择用RC震荡电路来实现这个功能。 借鉴的网页: http://www.eepw.com.cn/article/283745.htm RC振荡电路,采用RC选频网络构成,适用于低频振荡,一般用于产生1Hz~1MHz(fo=1/2πRC)的低频信号。

兔子-(PHP 5.3 and above) Please set 'request_order' ini value to include C,G and P (recommended: 'CGP'

由于在PHP最新的版本中增加了一个配置项目“request_order”,默认值为“GP”,这个存在一定的安全风险。这里我们建议用户将配置更改为“CGP” 可以在php的安装目录下找到php.ini配置目录,找到下面选项: request_order = "GP"  更改为 request_order = "CGP"   重启服务器后即可。 此

php.ini中两大加载配置文件的参数

Configuration File (php.ini) Path 和 Loaded Configuration File这个参数详解 Configuration File (php.ini) Path 这个参数是配置php的默认路径 Loaded Configuration File  调用的哪个php配置文件。 我们一般运行phpinfo看配置,去完成很多操作。 直接举例说明: 一

QT 遍历ini配置文件

在 Qt 中,处理 INI 配置文件是一项常见任务,通常使用 QSettings 类来读取和写入这些文件。QSettings 提供了一种方便的方式来操作 INI 文件中的配置数据。下面是如何使用 QSettings 遍历和处理 INI 配置文件的示例。 示例代码 假设有一个名为 config.ini 的 INI 配置文件,内容如下: [General]username=adminpass

android kernel 的config 如何选择-QCOM

https://blog.csdn.net/weijory/article/details/73104910   如何在deconfig文件里配置某个模块是否编译 首先以CONFIG_TOUCHSCREEN_FT5X06为例,这个CONFIG_TOUCHSCREEN_FT5X06在makefile里决定了obj-$(CONFIG_TOUCHSCREEN_FT5X06) += ft5x06_ts

关于小米手机USB传输稍大点的文件老中断的问题解决方法!

关于小米手机USB传输稍大点的文件老中断的问题解决方法! 这是一个很痛苦的事情,当你传输大文件的时候,传输到一半就会莫名其妙的中断,拔插数据线很多次以后,好不容易没准可以成功传输一次。 后来使用了360的手机助手,从调试模式传输文件,虽然不会中断,但是慢的要死。 最后我看到手机插上后手机提示 有3种模式:仅限充电 传输文件(MTP) 传输照片(PTP)。当然我们选择传输文件是没戏了,会中