在Mer系统中启动Android系统(一)

原创 2012年03月30日 18:00:07

由于项目需要,开始在OMAP上测试在Mer系统中利用LXC容器机制来启动Android机制。LXC虚拟容器机制最重要的限制是,虚拟系统必须与HOST系统共用同一个LINUX内核,鉴于Android在内核上有较大的修改,而Mer系统对内核的限制较小,拟采用Android内核来作为HOST系统内核。

一.编译LINUX内核

第一次直接使用下载的ANDROID内核uImage启动Mer,内核直接崩溃,暂时没有分析原因。同时编译好LXC的工具包后,在原生的Mer系统中执行lxc-checkconfig命令发现,Mer系统使用的内核很多LXC需要的特性没有开启。因此决定先编译一个新内核。

从OMAP提供的方法去下载内核源码。https://wiki.linaro.org/Platform/Android/JustWorkOnTheKernel,实际上这个链接的方法感觉不怎么好,实际上选好要下载的ANDROID版本后,打开https://android-build.linaro.org/builds/~linaro-android/panda-ics-gcc46-tilt-tracking-blob/,从download中下载linaro_kernel_build_cmds.sh。直接执行脚本或者从脚本中提炼出。步骤如下:

mkdir kernel

cd kernel

git clone git://git.linaro.org/people/andygreen/repo-branch-archive 

git checkout tilt-android-tracking

git clone不支持断点续传,可以采用gitfetch等方法来解决。checkout版本很重要,因为linux内核源码分支很多。下载内核配置

 http://snapshots.linaro.org/android/~linaro-android/panda-ics-gcc46-tilt-tracking-blob/235/kernel_config

修改kernel_config

l  从http://wiki.merproject.org/wiki/Adaptation_Guide,支持Mer系统需要开启的内核选项有:

CONFIG_EXT4_FS

y,m

Mer uses ext4 as rootfs

CONFIG_DEVTMPFS

y

needed by systemd

CONFIG_DEVTMPFS_MOUNT

y

needed by systemd

CONFIG_CGROUPS

y

CONFIG_INPUT_EVDEV

y

CONFIG_AUTOFS4_FS

y,m

CONFIG_IPV6

y,m,!

optional, but highly recommended

 CONFIG_RTC_DRV_CMOS

y,!

optional, but highly recommended

CONFIG_FANOTIFY

y,!

optional, required for systemd readahead.

CONFIG_UEVENT_HELPER_PATH

"",!

should be empty, if you want to use systemd without initramfs

CONFIG_AUDIT

y,!

optional, but recommended

CONFIG_TMPFS_POSIX_ACL

y,!

recommended, if you want pam_systemd.so to setup your "seats"

CONFIG_ANDROID_PARANOID_NETWORK

n

CONFIG_ANDROID_LOW_MEMORY_KILLER

n

CONFIG_DUMMY

n

CONFIG_ANDROID

n

not tested

 

l  https://wiki.archlinux.org/index.php/Linux_Containers

CONFIG_GROUP_SCHED=y

CONFIG_FAIR_GROUP_SCHED=y

CONFIG_RT_GROUP_SCHED=y

CONFIG_CGROUP_SCHED=y

CONFIG_CGROUPS=y

CONFIG_CGROUP_NS=y

CONFIG_CGROUP_FREEZER=y

CONFIG_CGROUP_DEVICE=y

CONFIG_CPUSETS=y

CONFIG_PROC_PID_CPUSET=y

CONFIG_CGROUP_CPUACCT=y

CONFIG_RESOURCE_COUNTERS=y

CONFIG_CGROUP_MEM_RES_CTLR=y

CONFIG_CGROUP_MEM_RES_CTLR_SWAP=y

CONFIG_MM_OWNER=y

CONFIG_NAMESPACES=y

CONFIG_UTS_NS=y

CONFIG_IPC_NS=y

CONFIG_USER_NS=y

CONFIG_PID_NS=y

CONFIG_NET_NS=y

CONFIG_NET_CLS_CGROUP=y

CONFIG_SECURITY_FILE_CAPABILITIES=y

CONFIG_DEVPTS_MULTIPLE_INSTANCES=y

其中CONFIG_DEVPTS_MULTIPLE_INSTANCES=y,CONFIG_GROUP_SCHED=y

没有开启。

依据LXC的README文档,为了便于测试,下面三个内核选项也开启:

CONFIG_MACVLAN=y

CONFIG_VETH=y

CONFIG_BRIDGE_NETFILTER=y

配置好内核选项后

make –j4 O=out ARCH=arm CROSS_COMPILE=${HOME}/opt/arm-2009q1/bin/arm-none-linux-gnueabi-mkimage uImage

如果没有mkimage工具,我使用的OPENSUSE从 http://download.opensuse.org/repositories/home:/netsroth/openSUSE_11.4/中下载cross-arm-linux-sheevaplug-uboot-mkimage,安装后执行

cp -pi /usr/bin/mkimage${HOME}/opt/arm-2009q1/bin/arm-none-linux-gnueabi-mkimage

这样就编出了需要的uImage内核,下一步测试uImage内核能否启动Mer系统了。


Android核心服务解析篇(三)——Android系统的启动

从大的方面来说,Android系统的启动可以分为两个部分:第一部分是Linux核心的启动,第二部分是Android系统的启动。第一部分主要包括系统引导,核心和驱动程序等,由于它们不属于本篇要讲的内容,...
  • liyuanjinglyj
  • liyuanjinglyj
  • 2015年08月02日 18:34
  • 3574

Android系统启动流程

转自http://blog.csdn.net/lizhiguo0532/article/details/7017503 Android系统启动流程 -- bootloader 摘要:本文讲解A...
  • zirconsdu
  • zirconsdu
  • 2013年02月06日 15:00
  • 18224

Android系统启动流程(四)Launcher启动过程与系统启动流程

此前的文章我们学习了init进程、Zygote进程和SyetemServer进程的启动过程,这一篇文章我们就来学习Android系统启动流程的最后一步:Launcher的启动流程,并结合本系列的前三篇...
  • itachi85
  • itachi85
  • 2017年02月23日 13:59
  • 6320

Mer系统兼容Android系统(二)

在专心研究论文的同时,突然转向工程的确不适应。不过言归正传,今天主要在OMAP平台上解决了昨天编译的内核崩溃问题。 上篇文章中编译出了OMAP平台上开启各种LXC技术所需要的Android内核uIm...
  • forestarmy
  • forestarmy
  • 2012年03月31日 19:59
  • 1142

android系统启动全程解析

  • 2012年12月07日 22:13
  • 959KB
  • 下载

android系统启动

  • 2017年12月01日 13:14
  • 8KB
  • 下载

android系统之从上电到kernel启动完成

  • 2016年07月28日 18:04
  • 1.69MB
  • 下载

Android系统 小米/三星/索尼 应用启动图标未读消息数(BadgeNumber)动态提醒

在Android手机上,如QQ、微信当有未读消息的时候、我们可以看到在应用的启动图标的右上角会有一个红色圈圈、且圈圈里会动态显示未读消息的数目,如下图显示: 那么该功能是怎么实现的呢? 在万能的互...
  • l416112167
  • l416112167
  • 2015年03月17日 16:50
  • 10628

Android系统启动流程源码分析

Android系统启动流程源码分析 首先我们知道,Android是基于Linux的,当Linux内核加载完成时就会自动启动一个init的进程。 又因为我们每当我们启动一个App时,就会生成一个新的...
  • jwc2436
  • jwc2436
  • 2017年11月29日 18:45
  • 604

Android系统应用框架篇:Activity启动流程(二)

我们正式开始分析Launcher Activity启动流程的源码,它是三种情况中流程最长的一种,其他两种启动流程都是它的子集,也可以将该流程理解为一个应用的启动流程。...
  • AllenWells
  • AllenWells
  • 2017年03月31日 16:52
  • 616
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在Mer系统中启动Android系统(一)
举报原因:
原因补充:

(最多只允许输入30个字)