一种从OTG设备启动Android系统的方法

文档序号:6634415阅读:638来源:国知局
一种从OTG设备启动Android系统的方法
【专利摘要】本发明方法涉及一种从OTG启动Android系统的方法,属于通信【技术领域】。本发明方法通过修改Android设备启动镜像,改变传统OTG设备挂载过程,具体是通过修改设备初始化进程init,使Android系统启动之前检测到OTG设备,并在内存文件系统中为其创建相应目录,然后利用设备冷启动过程为OTG设备创建设备节点,以从OTG设备上挂载系统分区和数据分区成为可能;同时,通过修改内核中配置文件,使其挂载OTG设备上的系统和数据分区,最终完成从OTG设备上启动Android设备。本发明方法针对现有规范无法从OTG设备上启动Android系统的问题,提出了一套切实可行的办法。
【专利说明】—种从OTG设备启动Android系统的方法

【技术领域】
[0001]本发明涉及一种启动Android系统的方法,特别涉及一种从OTG启动Android系统的方法,属于通信【技术领域】,

【背景技术】
[0002]USB技术的发展,使得PC和周边设备之间能够进行数据传输。但是,由于标准的USB使用主从的架构,只有USB主机端(“主”,即电脑)和USB周边装置(“从”)之间能进行数据传输,USB周边装置之间不能通过USB 口进行数据传输。为此,0TG(0n The Go)作为USB2.0版本的补充,应用于不同的设备或移动设备间的联接,实现在没有主机端的情况下,设备间的数据传送。
[0003]Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。Android4.0或以上系统的智能设备芯片大多都支持USB-0TG,通过OTG可以方便的读取外接SD卡中的数据,特别是对于不支持外接SD卡的手机。
[0004]但在Android系统中,OTG设备作为热插拔设备,只有Android系统启动后,OTG设备才会被系统记录并实现挂载。Android系统中,当OTG设备插入时,内核发送uevent消息给Vold守护进程,Vold守护进程解析uevent消息,并完成OTG设备结点的创建及挂载,其OTG设备挂载流程图如图1所示。Vold守护进程作为Android的本地服务,在Android系统启动之后运行。因而,这种传统的OTG设备挂载方法不可能实现从OTG设备上启动Android系统,因为OTG设备只有在Android系统启动后才能被挂载。
[0005]综上可知,要从OTG设备上启动Android系统,传统的OTG设备处理方式是行不通的。


【发明内容】

[0006]针对上述缺陷,本发明的内容是提出一种从OTG设备上启动Android系统的方法。
[0007]根据Android系统启动过程,在Linux内核(Android系统基于Linux内核)启动之后,需挂载多个必须文件系统,以启动Android运行环境,包括系统文件夹system(包含启动Android运行环境所需的本地服务等),数据文件夹data (记录Android运行环境的配置文件,以及用户程序等),系统文件系统/sys等。当使内核启动后挂载OTG设备上的系统(system)分区和数据(data)分区到设备的/system和/data挂载点时,Android设备将读取OTG设备上的Android环境数据,实现从OTG设备上启动Android系统。
[0008]又传统的OTG设备挂载方法不能满足从OTG设备上启动Android系统的要求,本方法中修改设备启动过程,在Android系统启动之前,使OTG设备能被内核记录,并为OTG设备创建设备节点,并使设备在启动过程中挂载OTG设备上的系统(system)分区和数据(data)分区,从而从OTG设备上启动Android系统。
[0009]在Android系统启动之如,存在冷启动过程。冷启动中王要用于为系统预直设备(例如内存存储卡)在/dev目录下创建设备节点,其主要过程为扫描内存文件系统下/sys/class、/sys/block和/sys/devices目录,并启动相应目录下的uevent,并最终在设备文件夹/dev目录创建设备节点,使系统最终能使用相应设备。因此,在冷启动之前,在/sys目录下创建OTG设备相关目录,则可在冷启动过程中在Android设备/dev目录创建OTG设备节点,从而使设备可以从OTG设备启动Android系统。
[0010]而Android设备冷启动这个过程是通过init进程执行的,init进程将运行本地服务uevent,本地服务uevent完成冷启动的过程。在运行本地服务uevent之前,如果内核在内存文件系统/sys/block目录下为OTG设备创建相关目录,init进程等待内核创建OTG设备相关目录(/sys/block/sda)完成后,才启动冷启动过程(uevent服务),如此,在冷启动过程中,将会在Android设备的/dev目录下创建OTG设备对应的设备节点,使Android系统启动之前就可挂载使用OTG设备,本发明方法中OTG设备挂载流程如图2所示。同时,对Android系统启动分区中的配置文件进行修改,将OTG设备中对应的system系统分区和data数据分区挂载在设备根目录的system和data挂载点上,如此,即可通过OTG设备启动Android 系统。
[0011]本发明是通过以下技术方案实现的:
[0012]—种从OTG设备启动Android系统的方法,包括以下步骤:
[0013]A.提取并修改Android设备启动分区镜像;
[0014]B.制作用于启动Android系统的OTG设备;
[0015]C.将修改之后的Android启动分区镜像重新刷入Android设备启动分区中;
[0016]D.将OTG设备与Android设备相连,启动Android设备,从而实现从OTG设备启动Android 系统。
[0017]在所述A中,提取出Android设备启动分区镜像,并修改启动分区中包含的初始化进程init进程可执行程序,使设备能在Android系统启动之前检测到OTG设备,同时修改Android设备启动时挂载的系统分区和数据分区为OTG设备中的系统分区和数据分区,修改之后重新制作成启动分区镜像。
[0018]在所述B中,在系统能检测到OTG设备之后,需要加载OTG设备中的分区,因而需使OTG设备中包含启动Android所需的系统(system)分区和数据(data)分区,并初始化系统分区和数据分区中数据,以便从OTG设备上启动。
[0019]所述C中,将修改后的An droid设备启动分区镜像刷入An droid设备启动分区中,设备启动时将使用新的启动分区镜像启动,并使用OTG设备启动Android系统。
[0020]有益效果
[0021]本发明方法通过对Android设备启动镜像修改,改变Android设备启动过程,同时制作启动Android系统的OTG设备,使Android系统从OTG设备上启动,并且从此OTG设备启动的Android系统将与设备本身系统完全隔尚。

【专利附图】

【附图说明】
[0022]图1为传统的OTG设备挂载流程不意图;
[0023]图2为本发明方法OTG设备挂载流程示意图;
[0024]图3为使用parted工具分区后分区情况示意图;
[0025]图4为Nexus 5分区情况示意图;
[0026]图5为启动分区镜像解压结果示意图;
[0027]图6为ramdisk根文件系统内容示意图;
[0028]图7为修改前fstab.hammerhead部分内容不意图;
[0029]图8为修改后fstab.hammerhead部分内容不意图;
[0030]图9为init.c中添加的两个函数示意图;
[0031]图10为init.c的main函数中调用位置示意图;
[0032]图11为拷贝nexus5_system.img到SD卡中第二分区不意图;
[0033]图12为手机启动Android系统情况示意图;
[0034]图13为OTG设备启动Android系统情况示意图;
[0035]图14为OTG设备启动挂载情况示意图;
[0036]图15为OTG设备启动Android设备实例图。

【具体实施方式】
[0037]为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明的一种从OTG启动Android系统方法进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0038]下面将按照上面所介绍的步骤,详细介绍各个步骤的【具体实施方式】。
[0039]实施例
[0040]本实施例使用Nexus 5手机作为实施平台,OTG设备为插入8G Micro SD Card的带mini usb 口的读卡器。当把SD卡插入带mini usb 口的读卡器,并把读卡器插在手机的mini usb 口上时,手机会把此外接设备当做OTG设备使用。实施例具体步骤如下:
[0041]A.提取并修改手机启动分区镜像
[0042]1.提取Nexus 5的启动分区镜像
[0043]Nexus 5 手机的启动分区(名为 boot 分区)为/dev/block/mmcblk0pl9 (使用 adb工具进入手机/dev/block/platform/msm_sdcc.1/by-name目录查看Nexus 5分区情况,如图4所示,图中上面方框标示的内容表示Nexus 5的boot分区为mmcblk0pl9),提取启动分区(boot分区)数据,保存为文件boot, img ο
[0044]2.解包启动分区镜像
[0045]启动分区镜像是按一定格式打包的,要修改启动分区镜像,首先需要解包启动分区镜像,Android解包工具split_bootimg.pi可用于解压启动分区镜像。解压启动分区镜像boot, img后会得到手机启动内核和ramdisk文件系统根目录,如图5所示。
[0046]3.修改启动分区镜像内容
[0047]解压启动分区镜像后,需修改启动分区镜像,使系统能在Android系统启动之前检测到OTG设备,并挂载OTG设备中的系统分区和数据分区。
[0048]主要修改在根文件系统ramdisk目录下,解包Nexus 5手机的启动分区镜像后,得到的ramdisk目录下文件如图6所示,主要修改图中方框中的文件。
[0049]方框中标识的fstab.hammerhead文件为Android系统配置文件,用于描述Android系统启动时,手机内置存储卡中分区与根文件系统中目录的挂载关系。没修改之前,fstab.hammerhead文件部分内容如图7所示,图中左横线标识的为手机中的分区,右横线标识的为分区挂载的目录。修改后文件fstab.hammerhead中部分内容如图8所示,由图可知,挂载在/system目录下的设备由原来手机中的/dev/block/platform/msm_sdcc.1/by-name/system 分区变为 /dev/block/sda2 (/dev/block/sda2 为 OTG 设备中的系统分区在Nexus5手机中的设备节点,经测试得到),同理挂载在/data目录下的变为/dev/block/sda3(/dev/block/sda3为OTG设备中的系统分区在Nexus5手机中的设备节点)。当成功挂载OTG设备中分区时,手机将通过OTG设备启动。
[0050]图6中方框中init为系统内核启动后,执行的第一个用户进程,将由它完成最基本的系统初始化,启动uevent服务执行冷启动,修改init的目的是使设备在Android系统启动之前能检测到OTG设备。
[0051]修改init需要基于init源码并进行修改,重新编译生成新的init可执行程序,替换已有的init可执行程序。init可执行程序的源码在Android源码中system/core/init目录下。打开其中的init.c文件,添加两个函数,用以循环检查Android内核是否在/sys/block目录为OTG设备创建相应节点(/sys/block/sda),如图9所示,并在main函数中调用wait_for_sda()函数,如图10所示。修改完成后,保存并重新编译Android系统源码,将生成修改后的init可执行程序,使用重新编译生成的修改后的init可执行程序替换已有的init可执行程序。
[0052]4.重新打包启动分区镜像
[0053]对解包后的内容进行修改之后,需要重新打包成一个启动分区镜,使用Android工具mkbootfs和mkbootimg可以将解包后的内容重新打包为启动分区镜像,命名为boot-new.1mg。
[0054]B.制作用于启动Anctoid系统的OTG设备
[0055]手机Nexus 5的启动分区镜像修改后,手机启动后将目g通过OTG设备启动Android系统。这时,需要制作用于启动Anctoid系统的OTG设备,包括为OTG设备分出存放system数据的system分区,存放data数据的data分区,同时需要往这两个分区中添加数据,以使手机日8从OTG设备启动Android系统。
[0056]1.0TG设备分区
[0057]实例中将SD卡插入带mini usb 口的读卡器的作为手机外接的OTG设备,因而只需对SD卡进行分区,即相当于对OTG设备进行分区。实例中对SD分区在Linux系统下进行,使用Linux下分区工具parted对SD卡进行分区(实例中SD卡在Linux下对应的设备节点为/dev/sdb),SD卡分区情况如图3所示,最终将SD卡分为三个分区,大小分别为1G、1.5G、5G,在 Linux 对应的设备节点分别为 /dev/sdbl、/dev/sdb2、/dev/sdb3,其中 1.5G 分区作为OTG设备中的system分区(存Android运行环境所需本地服务等),5G分区作为OTG设备中的data分区(存储Android运行环境的配置文件,用户数据,以及重要软件等),分区完成之后把三个分区分别格式化为vfat、ext4、ext4格式。
[0058]2.初始化OTG设备中system分区
[0059]Nexus 5内置存储卡中的system分区为mmcblk0p25 (如图4中下面方框所标不),初始化OTG设备中system分区,需将Nexus 5内置存储卡中的system分区中数据硬拷贝至OTG设备中system分区(SD卡中1.5G的分区)。
[0060]首先,通过adb工具连接手机,获取手机Root权限后,使用以下命令将手机system分区数据拷贝到手机的/sdcard目录下的文件nexus5_system.1mg中:
[0061]cat/dev/block/mmcblk0p25>/sdcard/nexus5-system.1mg
[0062]再将nexus5_system.1mg文件从手机中拷贝出来,并移至Linux系统下,同时将实例中所使用的SD卡连到Linux系统下,使用Linux下硬拷贝工具dd将nexus5_system.1mg文件拷贝至SD卡的第二个分区(1.5G) system分区中(实例中SD卡的第二分区,即OTG设备的system分区,在Linux下对应的设备节点为/dev/sdb2)。实例中使用的命令如图11所示,图中下划线标识的为使用的命令。
[0063]C.将修改之后的启动分区镜像刷入启动分区中
[0064]修改之后的启动分区镜像为boot-new.1mg,未修改之前的启动分区镜像为boot,img,通过adb连接手机,把boot-new.1mg放在手机中的/sdcard目录下,使用如下命令将修改后的启动分区镜像boot-new.1mg刷入Nexus 5启动分区/dev/block/mmcblk0pl9中:
[0065]cat/sdcard/boot-new.1mg>/dev/block/mmcblk0pl9
[0066]D.从OTG设备启动Android系统
[0067]刷入完成后,重新启动手机,将SD卡插入读卡器,再将读卡器插入手机mini USB口上,手机将把读卡器识别为OTG设备,并通过其启动Android系统,弟一次启动时首先会往SD的data分区中写入手机启动的配置数据。
[0068]E.验证从OTG设备启动
[0069]实例中将两个软件(手机淘宝shoujitaobao_110.apk和Android手机终端模拟器-Android-Terminal-Emulator-L 0.62.apk)保存在 OTG 设备中。当从 OTG 设备启动Android系统后,系统中可以看到这两个应用;当从手机中启动Android系统时,系统中找不到这两个应用。
[0070]图12是从手机中启动系统时显示的手机主界面,图13是从OTG设备启动手机时显示的主界面,从手机中启动时,可以看到百度地图应用,而从OTG设备启动时,可以看到淘宝和超级终端应用,两者壁纸不一样。图14是使用超级终端查看的手机从OTG设备启动时,设备的挂载情况,左边下划线标识的为设备,右边下划线标识的为相应设备的挂载目录,可知,系统启动时成功挂载OTG设备中的system分区(/dev/block/sda2)和OTG设备中的data分区(/deV/bl0Ck/sda3),可知手机从OTG设备启动成功。图15为OTG设备启动Android设备实例图。
[0071]本领域的技术人员从上面描述的内容可以了解,本发明方法各步骤间没有严格的先后关系,只要一个步骤的实现不需要依赖另一个步骤的完成,就可根据实际情况调整顺序,如步骤A和步骤B。
[0072]以上所述的具体描述,对发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
【权利要求】
1.一种从OTG设备启动Android系统的方法,其特征在于包括以下步骤: 步骤一,提取并修改Android设备启动分区镜像; 步骤二,制作用于启动Android系统的OTG设备; 步骤三,将修改之后的Android启动分区镜像重新刷入Android设备启动分区中;步骤四,启动Android设备,将OTG设备与Android设备相连,从而实现从OTG设备启动Android系统。
2.根据权利要求1所述的从OTG设备启动Android系统的方法,其特征在于:所述步骤一中对分区镜像的修改包括以下两部分内容: 一、修改Android设备初始化进程init,添加等待内核在内存文件系统中为OTG设备创建相应目录的内容,使Android设备能在Android系统启动之前检测到OTG设备; 二、修改Android设备启动时挂载的系统分区和数据分区为OTG设备中的系统分区和数据分区,使Android设备能够从OTG设备上启动Android系统。
3.根据权利要求1所述的从OTG设备启动Android系统的方法,其特征在于:所述步骤二包括以下两部分内容: 一、对OTG设备分区及格式化,使其至少包含2个分区,分别对应Android系统启动时的系统分区和数据分区; 二、初始化OTG设备的系统分区,使其包含Android系统运行环境所需的本地服务内容。
4.一种从OTG设备启动Nexus 5手机Android系统的方法,其特征在于包括以下步骤: 步骤一,提取并修改Android设备启动分区镜像,包括以下内容: . 1.提取Nexus5的启动分区镜像; . 2.解包启动分区镜像;. 3.修改启动分区镜像内容,包括如下两项: (1)修改初始化进程init,添加等待内核在内存文件系统中为OTG设备创建相应目录的内容; (2)修改Android设备启动时挂载的系统分区和数据分区为OTG设备中的系统分区和数据分区; .4.重新打包启动分区镜像; 步骤二,制作用于启动Android系统的OTG设备,包括以下内容: . 1.为OTG设备分区,使其至少包含一个系统分区和一个数据分区,然后对分区进行格式化; . 2.初始化OTG设备的系统分区,使其包含Android系统运行环境所需的本地服务内容; 步骤三,将修改之后的Android启动分区镜像重新刷入Android设备启动分区中;步骤四,重新启动Android设备,将OTG设备与Android设备相连,从而实现从OTG设备启动Android系统。
【文档编号】G06F9/445GK104407890SQ201410650732
【公开日】2015年3月11日 申请日期:2014年11月15日 优先权日:2014年11月15日
【发明者】曾礼, 马忠梅, 赵旭强, 龙磊, 谭毓安, 李元章 申请人:北京理工大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1