Android根据bootmode设置usb config

1 Shell Script
bootmode=`getprop ro.bootmode`
bootmode=${bootmode:0:4}
adb_enabled=`getprop ro.debuggable`
pid9091_qti_bam="diag,serial_smd,rmnet_qti_bam,adb"
oem_usbcfg_init()
{
    case "$bootmode" in
        "ffbm" | "pid9")
            setprop persist.sys.usb.config $pid9091_qti_bam
            return
        ;;
    esac

    case "$adb_enabled" in
        "1")
            setprop persist.sys.usb.config mtp,adb
        ;;
        *)
            setprop persist.sys.usb.config mtp
        ;;
    esac
}

2 Abbreviations
ARC: Argonant RISC Core
AT91SAM9260: SAM means Smart ARM-based
ATMEL SAMBA: ATMEL Smart ARM-based Boot Assistant
DWC2:Design Ware Controller 2,Apple的嵌入式设备,包括iPad和iPhone都是使用的DWC2
ISP1161:Philips' Integrated host Solution Pairs 1161,“Firms introduce USB host controllers”,https://www.eetimes.com/document.asp?doc_id=1290054
SL811HS:Cypress/ScanLogic 811 Host/Slave,性能上与ISP1161(Integrated host Solution Pairs 1161)相当
TDI:TransDimension Inc.,该公司首先发明了将TT集成到EHCI RootHub中的方法,这样对于嵌入式系统来说,就省去了OHCI/UHCI的硬件,同时降低了成本,作为对该公司的纪念,Linux内核定义了宏ehci_is_TDI(ehci)
TT:Transaction Translator(事务转换器,将USB2.0的包转换成USB1.1的包)

Android系统中,高通(Qualcomm)内核驱动可以通过访问特定的系统文件来获取设备的启动模式(boot mode)。通常,这些信息会存储在内核参数或者设备树(Device Tree)中。一种常见的方法是通过读取系统文件`/proc/cmdline`来获取启动参数,该文件包含了启动时传递给内核的参数。 例如,可以通过打开`/proc/cmdline`文件,然后读取内容并解析其中的参数来判断启动模式。如果参数中有`androidboot.mode=charger`,则表示设备处于充电模式启动。如果参数中有`androidboot.mode=download`,则表示设备处于下载模式启动,等等。 在高通的内核驱动中,通常会有一些辅助函数来读取和解析这些启动参数。例如,在内核的源码中可能会定义一些宏或函数,如`is_charging_enabled()`、`is_download_mode()`等,用于直接检查当前的启动模式。 具体实现代码可能如下所示(仅作为示例,实际代码可能会根据内核版本和设备型号有所不同): ```c #include <linux/module.h> #include <linux/init.h> #include <linux/proc_fs.h> static int __init bootmode_init(void) { char buffer[1024]; unsigned long len = sizeof(buffer); // 读取启动参数 if (kernel_read_file_from_path("/proc/cmdline", buffer, &len, NULL, 0) == 0) { printk(KERN_INFO "Boot Mode: %s\n", buffer); // 这里可以添加逻辑来解析buffer中的启动模式信息 // 例如使用strcasestr函数查找特定的boot mode字符串 } return 0; } static void __exit bootmode_exit(void) { printk(KERN_INFO "Module removed\n"); } module_init(bootmode_init); module_exit(bootmode_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Your Name"); MODULE_DESCRIPTION("A module to get Android boot mode on Qualcomm platform"); ``` 需要注意的是,具体的文件路径和参数可能会因为Android版本和设备制造商的不同而有所不同。因此,开发者需要根据实际设备的内核源码和文档来确定正确的路径和参数。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值