在Mer系统中启动Android系统(一)
来源:互联网 发布:声音合成软件 编辑:程序博客网 时间:2024/05/17 23:46
由于项目需要,开始在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系统了。
- 在Mer系统中启动Android系统(一)
- Mer系统兼容Android系统(二)
- Mer系统兼容Android系统(三)
- android系统中的多线程(一): 关于在android中启动线程以及线程间的交互
- android系统中的多线程(一): 关于在android中启动线程以及线程间的交互
- android系统中的多线程(一): 关于在android中启动线程以及线程间的交互
- 移植Mer-qtmediahub到hi3716m(3):在mer-qtmediahub中加入hi3716m的驱动
- xbmc与mer(一)
- 在Android系统中添加组合键快捷启动功能
- Android 如何在App中启动系统闹钟
- Android系统篇之----Hook系统的AMS服务实现应用启动的拦截功能----一、Hook系统剪切板服务流程回顾在之前的一篇文章中已经介绍了 Android中的应用启动流程,这个流程一定要理
- Android系统在新进程中启动自定义服务过程(startService)的原理分析
- Android系统在新进程中启动自定义服务过程(startService)的原理分析
- Android系统在新进程中启动自定义服务过程(startService)的原理分析
- Android系统在新进程中启动自定义服务过程(startService)的原理分析
- Android系统在新进程中启动自定义服务过程(startService)的原理分析
- Android系统在新进程中启动自定义服务过程(startService)的原理分析
- Android系统在新进程中启动自定义服务过程(startService)的原理分析
- 浅析深究什么是中间件
- 资源管理器
- MediaInfo参数大全
- oracle权限
- 数据窗口中各项指标的获取方法
- 在Mer系统中启动Android系统(一)
- pl/sql中的局部块
- pl/sql模块重载
- 7.动态构造二维数组
- 请选择您喜欢的人物头像JS代码
- pl/sql中的前置声明
- GMock对Mock对象设置期望
- 统一软件过程的基本概念
- Android中的Selector