当前位置:首页 >> 信息与通信 >>

Android详细移植过程


apt-get 设置好后,按照下面的步骤安装相关组件 Required Packages (Ubuntu 8.04) $ sudo apt-get install python2.5 $ sudo apt-get install sun-java6-jdk sun-java6-bin sun-java6-jre Add/Edit /etc/bash.bashrc export J

AVA_HOME=/usr/lib/jvm/java-6-sun-1.6.0.07 $ sudo apt-get install flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev zlib1g-dev zip curl valgrind libncurses5-dev build-essential $ sudo apt-get install x-dev $ sudo apt-get install libx11-dev

编译 Android source code $ cd ~/mydroid $ export ANDROID_JAVA_HOME=$JAVA_HOME $ cd ~/mydroid $ make 编译 Android Kernel Building zImage Go into kernel directory $ cd ~/mydroid/kernel $ make msm_defconfig ARCH=arm $ make ARCH=arm CROSS_COMPILE=../prebuilt/linux-x86/toolchain/armeabi-4.2.1/bin/arm-eabi可以在 kernel/arch/arm/boot/目录下看到 build 好的 zImage

原文地址:http://bbs.androidin.com/archiver/tid-2413.html 由于论坛改版, 很多有用的资源都不见了, 所以这里把自己对 cupcake 下载和编译方法进行 详细说明,以后还会陆续发完善的开发板移植说明、内核编译说明、一些模块级的分析等, 希望对刚开始做 android 的朋友有所帮助,同时欢迎高手指正。

一.PC 工作环境准备 1.从 Ubuntu 官方主页 www.ubuntn.com.cn 下载 Ubuntu8.04 桌面版,然后完全安装。 2.打开 ubuntu 终端,输入 sudo apt-get install 命令来通过 ubuntu 服务器在线安装需要使用的软件,这里不需要选 择软件版本,ubuntu 服务器会做自动的版本匹配。待安装的软件有 flex,bison,gperf, libsdl-

dev,libesd0dev,libwxgtk2.6-dev,build-essential,python,valgrind,curl,git。执行命令后使 用 which 命令验证是否 安装成功,注意,如果缺少部分软件,或者安装没有成功,编译 通常都会遇到问题,无法完成。 3.从 www.java.sun.com 下 载 JDK_1.5.0_18.bin,在 ubuntu 终端中直接执行该程序,默认会被安 装 到/usr/JDK_1.5.0_18 路径下。在终端中输入#java–version,如果显示出 java 版本信息, 说明 java 安装成功。 这里没有选择 ubuntu 的自动安装,原因主要是有时候下载速度很慢,而且安装过程有 时候会出现问题,反正这样从 SUN 的官网下载安装也很简单,呵呵。

4.使用 export 来设置环境变量: #export JAVA_HOME=/usr/jdk1.5.0_18 #export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar #export PATH=$PATH:$JAVA_HOME/bin 由于因为其它工作需要的原因,这里我还安装了 1.6 的 JDK,所以使用 export 的方式 来动态改变环境变量,而没有直 接写到/etc/bash.bashrc 中,这个大家可以根据自己 的具体情况来选择。 #export PATH=/usr/local/git/bin:/usr/local/git/libexec/git-core:$PATH(对 git 工具进行设置,否则无法正 二.代码下载 这里的所有代码指定为 Android 的 cupcake 版本,更新日期为 2009 年 4 月 8 日,这个 版本是 Android 一个相对比较新的 1.创建工作目录: #mkdir /home/android #cd /home/android #mkdir bin 2.下载安装 repo 版本管理工具: #curl http://android.git.kernel.org/repo > /home/android /bin/repo #cd bin #chmod a+x repo 版本。 常使用)

由于 Android 项目官方采用 repo 来做同步管理, 所以这里只有使用 repo 才可以做代码 同步。 3.准备下载 Android: #cd /home/android #./bin/repo init -u git://android.git.kernel.org/platform/manifest.git –cupcake 通常情况下会出现 error 提示(如果是以前没有创建过 repo 账户的话),这个错误可 以忽略。 最后的-cupcake 就是 为了下载 cupcake 版本, 如果不加的话, 下载的是 master

版本,master 版本属于开发测试版本,很多功能还不稳定 4.配置 repo 帐户: #git config --global user.email \"[email=xxxxx@xxxxxxx]xxxxx@xxxxxxx[/email]\" #git config --global user.name \"xxxxxx\" 邮箱地址填有效邮箱即可,我试过,其实这步跳过也没有问题。 5.下载源码: #repo sync 这个操作就是下载整个 Android 的源码到本地,具体花费时间和网速有关,cupcake 版 本源码大概 1.3G 左右。进 入/home/android/可以看到 Android 的源码目录如下:

--repo --主要是同步管理所用到的一系列文件 --bionic --Android 编译过程所需要的一些库 --bootable --负责启动和备份的一些文件 --build --最主要的一些 makefile 和编译配置文件

--dalvik --经过 Google 优化了的 java 虚拟机 --development --开发用的一些文件夹,包括模拟器和工具等 --external --Android 工程中引入的外部功能库 --frameworks --中间件部分 --hardware --和硬件有关的一些支持文件,包括 wifi,电信模块等 --kernel --经过了优化和修改的 linux 内核 --packages --所有的上层应用包 --prebuild --Android 编译工具所在目录 --system --一些系统级文件 三.系统和开发工具编译 1.系统编译 Android 文件系统由于已经自带了经过优化的交叉编译工具,并且为所有的源码都提供 了经过验证的 makefile,所 以系统的整体编译相对简单,官方发布的版本中基本功能都已经包含进了 makefile 中,但

是我下载的版本的中文 的输入法没有被引入,这里做适当修改: #cd /home/android/build/target/product/ #gedit generic.mk 打开这个文件后,在 PRODUCT_PACKAGES 中,加入 PinyinIME,然后保存退出。这样在整 体编译的时候就会把中文输入 法也编译进 system 中了。

修改完成后: #cd /home/android/ #make

第一次进行整体编译,这个过程大概持续 2 到 3 小时,默认情况下,会在/home/android/ 目录下生成一个 out 文件夹 ,所有的编译生成物都在这一目录下。如果想更改生成文件的目录,请参考 /build/buildspec.mk.default 文件中 的说明和选项,很简单,相信大家都能看懂。如果编译过程中出现问题,请自行检查上面 PC 工作环境准备部分中是 否哪里出了问题, 就不要在论坛里反复问了, 因为这样的问题应该是自己参考这个帖子后可 以完全自己解决的。

2.开发工具的编译 Android 提供了完整的开发工具和交叉编译工具,这些都包含在了源码内,所以只要对 源码正确编译, 就可以获得 丰富的开发工具, 并且 Android 的移植工作也需要这些工 具的支持。 编译 Android 开发工具的步奏如下: #cd /home/android/ #make sdk 如果出现无法正常编译的情况, 请检查 JDK1.5.0_18 的环境变量配置是否成功。 正常情 况下最后在/home/android/ 目录下会生长一个 out 文件夹。

#cd /out/host/linux-x86/sdk/ 可以看到这里有了一个名叫 android-sdk_eng.root_linux-x86 的文件夹,这个文件夹 基本包含了 Android 的模拟器 和所有的开发调试工具。 打开这个文件夹, 可以看到这 里主要由以下几部分组成: --add-ones --需要增加的新工具路径 --docs --关于模拟器和各种开发工具的说明等 --platform --模拟器和开发工具需要的文件 --tools --模拟器和开发工具的应用程序

四.模拟器使用和文件系统提取 1.模拟器使用 进入~/android-sdk_eng.root_linux-x86/tools 目录下,这里有很多 Android 的工具, 其中模拟器对应的应用程 序是 emulator。下面是正确使用模拟器的步奏:

#./android create avd –n NO1 –t 1 这个命令会进入创建 avd 的过程,按自己的需要做出一些选择后,名称为 NO1 的 avd 就创建成功了,以后可以通过这 个创建的 avd 来使用模拟器。1.4 之前的版本不需要

这样创建,1.5 版本后不正确创建是无法使用的。 #./android list avd 输入命令来检查创建是否成功,如果成功会列出来。 #./emulator –avd NO1

启动刚才创建的名为 NO1 的模拟器,使用的内核,文件系统等均使用默认的,即 ~/android-sdk_eng.root_linuxx86/platform/路径下的内核和文件系统。没什么问题的话,我们就可以看到 Android 操作 系统的虚拟界面了。 2.使用自己编译的系统 Android 可以运行在开发板上的文件系统的提取需要依靠模拟器,具体的操作步奏如 下: #cd /home/android/out/ android-sdk_eng.root_linux-x86/tools/ #./mksdcard –l 200M /home/sdcard.img 这里使用 mksdcard 开放工具在/home 目录下建立一个 200M 的 sdcard.img, 用于模拟器 中数据和外部数据的交互,虚 拟 SD 卡的大小不应该小于 100M,否则在后期的文件系

统打包过程中,有可能会有 SD 卡存储空间不够的问题。 #./android create avd –n cupcake –t –c /home/sdcard.img 1 创建一个名为 cupcake 的,附带有 sdcard 的虚拟设备。 #./emulator –avd cupcake –sysdir /home/android/out/target/product/generic –data /home/android/out/target/product/generic/userdata.img -ramdisk /home/android/out/target/product/generic/ramdisk.img –kernel /home/android/prebuild/androidarm/kernel/kernel-qemu

使用名为 cupcake 的虚拟设备启动模拟器,并规定系统,数据等的映象文件路径,模拟器内 核采用 prebuild/android-arm/kernel/kernel-qemu。当然也可以使用自己编译的内核镜像,关于

如果编译内核的问题 会 在以后陆续发贴说明。 打开一个新的终端进行操作: #cd /home/android/out/ android-sdk_eng.root_linux-x86/tools/ #./adb remount 这里使用 adb 工具的 remount 选项来使模拟器中的 system 目录权限改为可读写。 #./adb push tar /system/bin 这里使用 adb 工具的 push 指令将提前使用 busybox 做好的 tar 应用程序加入到模拟器 的/system/bin 目录下。关于 busybox 的使用这里不作介绍,网上太多了,呵呵 #./adb shell 这里使用 adb 工具进入到模拟器的 shell 中。 进入到 Android 模拟器的 shell 中操作如下: #tar xvf /sdcard/system.tar /system #tar xvf /sdcard/userdata.tar /data

这里使用前面加入到模拟器中的 tar 应用程序来对 system 和 data 目录下所有内容进行打 包,并存储到 sdcard 里。操 作结束后,进入 sdcard 目录下查看是否有了 system.tar 和 userdata.tar 文件,如果有, 则证明打包成功。 #exit 退出 shell,并关闭模拟器。 #mount –o loop sdcard.img /mnt #cd /mnt 这里将虚拟 SD 卡挂载在/mnt 目录下,进入/mnt 目录后,就可以将 system.tar 和 userdata.tar 拷贝出来,文件系统的 提取完成。

经过测试,发现其实使用 android 提供的 mkyaffsimage 直接对 /out/target/product/generic/system 目录 进行打包 ,制作出 system.img 也完全可以使用,不过不知道 userdata.img 如何制作,希望有人可能 指点。使用 mkyaffs2image 制作文件系统映像时要注意的是一些配置文件的权限问题,比如 /system/usr/keylayout 下的文件 权限就有问题,需要修改,否则生成的映像在模拟器中加载后,键盘等无法正常使用。 最后,要说的是,新加入 android 的朋友们遇到问题我个人建议最好不要立刻就问,毕

竟是个 80%以上都开源的系 统,不妨自己尝试解决问题,到论坛逛逛,在网上搜索下,或者自己读下源码,都是一种提 高。拿到的资源其实都 是一样的,学到的东西,得到的锻炼却是不同的。 xuhj 发表于 2009-4-21 18:57 LZ 在创建工作目录在/home 路径下新建 android 目录,个人看法觉得不妥,Linux 的“潜规 则”里,这里是放置非 ROOT 用户的 home。 hercules 发表于 2009-4-21 21:34 》这里没有选择 ubuntu 的自动安装,原因主要是有时候下载速度很慢,而且安装过程有时 候会出现问题,反正这样从 SUN 的官网下载安装也很简单,呵呵。 这里是因为你软件源没选对, 让系统自动找一个速度最快的就可以了。 我找到一个是加拿大 的一个服务器,平均速度大概在 200K 左右 xuezei117 发表于 2009-4-23 16:41 工作目录创建在/home 下的原因很简单,因为是公司的工作栈,规定统一在/home 目录下建 立开发工程,谢谢,何况个人认为即使建立在这个目录下也无不可,没人规定开发一定要以 root 身份来进行,尤其对于工作栈这样多用户共用的情况下 xuezei117 发表于 2009-4-23 16:43 软件源选择问题我没有尝试过,相信大部分人都用的和我一样的方式,从 sun 上下载 JDK 一样很快,没有任何问题,而且版本完全可控,没有任何问题 liouville 发表于 2009-4-24 10:42 怎么我使用这个命令不能创建呢? #./android create avd –n NO1 –t 1 ===== root@liouville:~/liouville/Mydroid/cupcake/out/host/linux-x86/sdk/android-sdk_e ng.root_linux-x86/tools# ./android creat avd -n NO1 -t1 Usage: android --list [target|vm] android --create --target Options: -l [target|vm], --list [target|vm] Outputs the available targets or Virtual Machines and their Ids. xuhj 发表于 2009-4-24 13:28 回 3 楼(xuezei117) 的帖子 有些奇怪,我没提到要用 root 来开发,而且我们都是尽量避免使用这大权限的用户。当然 你可以把这个目录放在任何路径下,我只是提醒这是个“潜”规则而已,呵呵。 --name

xuezei117 发表于 2009-4-24 14:31 那你的意思应该放在什么路径下最好? xuezei117 发表于 2009-4-24 14:36 回 5 楼(liouville) 的帖子 再次尝试,发现是没有问题的 ./android create avd -n 111 -t 1 注意最后面的符号是阿拉伯数字 1,不是英文 如果还不对,可以使用./android list target 来确认下你的版本的 target 号是多少 hercules 发表于 2009-4-24 21:01 回 5 楼(liouville) 的帖子 早一点的虚拟机是这么创建的(三月份的 Source code) ./android vm -t 1 -n your_name -s your_skin 最新的代码才是 ./android create avd -t 1 -n your_name -s your_skin create avd 不行的话试试 vm biaji 发表于 2009-4-24 23:33 请问如果我想在内核中加入 netfilter 支持应该修改哪个配置文件后编译才行呢? niuyi 发表于 2009-4-27 12:13 LZ, 我按照你的步骤做到 repo sync 这一步,已经开始下载了.可是到了 remote: Compressing objects: 100% (31/31), done 这里,就一直停下了,我等了一晚上,也还是停在这里. 请问,这是怎么回事?谢谢. 我的 EMAIL:niuyimail@126.com 请你也留下你的联系方式吧? xuezei117 发表于 2009-4-27 13:31 回 10 楼(biaji) 的帖子 在 make menuconfig 时,在配置选项中选择 Networking options→IP:Netfilter Configuration,基本都在这里哈 niuyi 发表于 2009-4-27 22:10 我知道是什么问题了。 xuezei117 发表于 2009-4-28 15:59 什么问题? xiangmocheng 发表于 2009-6-10 11:15 很好的帖子~实践中~

2. Android 文件系统 =================== 要在目标板上启动 Android, 需要 Android 的文件系统。这些可以从 Android 的模拟器里得 到。 参考这边文章: [url=http://discuz-android.blogspot.com/2008/01/extract-google-android-file-system.html ]extract-google-android-file-system[/url] 以下是具体的步骤: * Start emulator in debug mode and with sdcard: # emulator -sdcard card.img -debug-kernel * card.img is created by mksdcard command: # mksdcard -l card 256M card.img * Download busybox from [url=http://discuz-android.blogspot.com/2008/01/extract-google-android-file-system.html ]above link[/url] or busybox for android. * After emulator started, do this in host: # adb push busybox /system/bin/busybox # adb shell # cd /sdcard # busybox tar cf system.tar /system # cd / # umount /sdcard * Follow the guide above, it says the /data direcotry is also needed. But from the init.rc, the init scripts create this directory. So it is not necessary to dump data directory. * shutdown the emulator, and copy system.tar out # mount -o loop card.img /mnt/sdcard # ls /mnt/sdcard/ -l -r-xr-xr-x 1 root root 45923328 2009-01-09 13:46 system.tar # cp /mnt/sdcard/system.img . # umount /mnt/sdcard * Make android filesystem Now we have all the files for android filesystem: * system.tar dumped from emulator * ramdisk.img in emulator directory: tools/lib/images/ # mkdir android_rootfs # cd android_rootfs * unpack system.tar # tar xf ~/android/system.tar (commands below runs on emulator shell) # chmod 755 /system/bin/busybox

* unpack ramdisk.img Android ram disk image is a gziped cpio archive. # cp ramdisk.img ramdisk.gz # gunzip ramdisk.gz # cd android_rootfs # cpio -iv < ../ramdisk * Now the android rootfs contained the files we need. 另外, 还有几个文件需要修改一下: init.rc init.goldfish.rc 和 /system/etc/init.goldfish.sh. 这 几个文件都是针对 goldfish 目标板的。 init 程序会读这些文件并执行相应的命令。 init 程序读取配置文件的时候,目标板的名字是通过以下接口获得的: # cat /proc/cpuinfo Processor ...... Hardware Revision : NE1 : 0000 : ARMv6-compatible processor rev 4 (v6l)

上面 Hardware 就是 init 使用的目标板的名字。因此: # cp init.goldfish.rc init.ne1.rc # cp /system/etc/init.goldfish.sh /system/etc/init.ne1.sh 然后再修改 init.rc init.ne1.rc 和/system/etc/init.ne1.sh 3. 启动 Android ================ 可以直接从 Android rootfs 里启动,也可以先从原有的根文件系统启动,然后通过 chroot 命令切 换到 Android 文件系统并启动 Android. 这里选择后者。 NaviEngine 使用 NFS, 因此,首先从 NFS 启动系统,然后在切换到 Android 文件系统。 这里 将 Android 文件系统放在 USB HardDisk 上。 NaviEngine 启动完之后,通过一下脚本 start_android.sh 切换到 Android 文件系统: ---------------------------------#!/bin/sh -x echo "Starting Android ..." mount /dev/sda1 /mnt/usb rm -f /mnt/usb/tmp/* umount /sys umount /dev/pts umount /proc umask 000 chroot /mnt/usb /system/bin/sh ---------------------------------运行该脚本之后,进入了 Android 的 shell(注意上面 chroot 命令后面的参数: /system/bin/sh 表示切换之后运行该命令,启动 shell) 。 最后,执行该命令: # ./init init: cannot open '/initlogo.rle' sh: can't access tty; job control turned off

# warning: `rild' uses 32-bit capabilities (legacy support in use) LCD 上出现了 Android 文字和 Android 的 LOGO。 Enjoy it. # ps USER root root root root root root root root root root root root root root root root root root root root root root root root root root root root root system root root radio root media root system radio app_3 1 2 3 4 5 6 101 112 115 135 136 137 139 140 142 143 144 357 359 362 386 443 452 456 457 472 478 479 733 734 735 736 737 738 739 741 755 793 797 PID 0 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 2 2 452 472 478 479 479 479 479 479 479 479 479 479 738 738 738 PPID VSIZE RSS 1376 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 WCHAN PC NAME c003f6e4 40064db0 S /bin/busybox

c0051208 00000000 S kthreadd c0041e50 00000000 S ksoftirqd/0 c0061790 00000000 S watchdog/0 c004e124 00000000 S events/0 c004e124 00000000 S khelper c004e124 00000000 S kblockd/0 c026323c 00000000 S khubd c02829a4 00000000 S kseriod c0070800 00000000 S pdflush c0070800 00000000 S pdflush c007531c 00000000 S kswapd0 c004e124 00000000 S aio/0 c004e124 00000000 S nfsiod c004e124 00000000 S xfs_mru_cache c004e124 00000000 S xfslogd/0 c004e124 00000000 S xfsdatad/0 c004e124 00000000 S kpsmoused c004e124 00000000 S kstriped c004e124 00000000 S hid_compat c004e124 00000000 S rpciod/0 c009dbf0 4012fb34 S /devel/usr/sbin/telnetd c003f6e4 40064db0 S /bin/ash

2192 232 1364 500 0 0 708 288 740 812 668 0 0

c0252278 00000000 S scsi_eh_1 c027ba3c 00000000 S usb-storage 320 196 332 268 268 c003f6e4 afe0d0dc S /system/bin/sh c009d69c 0000c58c S ./init c003f6e4 afe0d0dc S /system/bin/sh c0240428 afe0c33c S /system/bin/servicemanager ffffffff afe0c09c S /system/bin/mountd c02b0220 afe0cccc S /system/bin/debuggerd ffffffff afe0c9ac S /system/bin/rild

2840 1292 c003f6e4 40125778 S /bin/sh

1848 356 3276 616

70640 18848 c009dbf0 afe0c464 S zygote 17828 3476 ffffffff afe0c33c S /system/bin/mediaserver 1168 572 804 312 c009d69c afe0d2ac S /system/bin/dbus-daemon c0309e6c afe0c09c S /system/bin/installd

bluetooth 740

174828 27052 ffffffff afe0c33c S system_server 101896 17776 ffffffff afe0d434 S com.android.phone 115224 23304 ffffffff afe0d434 S android.process.acore

app_21 app_7 app_0 app_25 app_22 app_2 root

808 824 837 846 853 867 882

738 738 738 738 738 738 733

92532 14636 ffffffff afe0d434 S com.example.android.softkeyboard 96228 15628 ffffffff afe0d434 S com.android.mms 92768 14784 ffffffff afe0d434 S com.android.alarmclock 95016 14920 ffffffff afe0d434 S android.process.im 95016 16244 ffffffff afe0d434 S com.android.calendar 94960 15668 ffffffff afe0d434 S android.process.media 888 348 00000000 afe0c09c R ps

也可以通过 logcat 命令查看 系统 log。

上网查了一些资料,自己做了个 android 文件系统(root file system). 和大家分享一下。 如何创建 android 的 file system,这里介绍两种方法。 第一种就是通过 build android source 得到,source build 结束之后,会产生大部分的 android 文件系统,位置在你的 android source build 目录下的 out/target/product/generic/。其中 root/就是你的 root fs, 你需要将 system/拷贝到 root/system 下,这样 root/就是你得到的一个基本的文件系统。但是,现在 root/dev 下 面是空的, 所以, 我们需要创建所需要的 device, 你可以到系统 /dev 下,把所有的 device 打一个包, 拷贝到 dev 下面 (最省事的做法) 或者使用 mknod 来自己建所需要的 device。 ; 第二种方法,是通过 android 镜像文件来得到文件系统。 android 源码编译后得到 system.img,ramdisk.img,userdata.img 映像文件。 其中, 是 emulator 的文件系统,system.img 包括了主要的包、库等文件,userdata.img 包括了 一些用户数 据, emulator 加载这 3 个映像文件后, 会把和 userdata 分别加载到 ramdisk 文件系统中的 system 和 userdata 目录下。 ramdisk.img system 所以,可以通过下面的方法来建立我们自己的文件系统: 1. 从 android SDK 的 SDK/ platforms/android-1.5/images 下面得到 Ramdisk.img 2. 解开 ramdisk.img $ mv ramdisk.img ramdisk.cpio.gz $ gzip -d ramdisk.cpio.gz $ mkdir rootfs

$ cd tmp $ cpio -i -F ../ramdisk.cpio *** 此时 rootfs 目录下的就是 ramdisk.img 的文件和目录了,也就是你的 root file system 根目录了。 3. 启动 android 模拟器,从模拟器里面取出 data/ 和 system/两个文件夹。 具体方法可以参考这里 ------------------------ 首先先给 andriod 装上 busybox 1. 下载 busybox fro android http://blog.chinaunix.net/u/20947/showart.php?id=1913228 2. 运行 adb shell 进入到 android emulator

3. # mkdir /data/busybox
4. $ adb push busybox /data/busybox/busybox 5. # cd /data/busybox; ./busybox --install 6. # chmod 555 /system/bin/busybox 接下来创建 tarball for /system and /data #/data/busybox/busybox tar cvf /data/data.tar /data #/data/busybox/busybox tar cvf /data/system.tar /system 最好,提取 adb pull /data/system.tar system.tar adb pull /data/data.tar data.tar 最好需要将提取出的 tar 文件转换为 img 文件, 这时候就要用到 mkyaffs2image 工具了。 首先,编译 yaffs2 镜像制作工具:mkyaffs2image 下载:http://www.aleph1.co.uk/cgi-bin/viewcvs.cgi/yaffs2/ //点击左下角的 Download tarball 下整个 tar 包 解压,进入 utils 目录,编译 生成 mkyaffs2image 及 mkyaffs 命令格式 #./mkyaffs2image system/ system.img ------------------------------ 4. 将这两个文件夹拷贝到 rootfs 里面,覆盖掉里面相应的那两个同名文件夹。 5. 最后一步,同第一种方法一样,创建 dev/,这里不再赘述。

$ sudo apt-get install flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev

zlib1g-dev zip curl valgrind libncurses5-dev build-essential $ sudo apt-get install x-dev $ sudo apt-get install libx11-dev 安装 git Install Packages $ sudo apt-get install git-core gnupg Git是一种版本管理的工具 安装好git后同样需要进行设置代理。 下载,编译connect.c. $ cd ~/bin $ curl http://www.meadowy.org/~gotoh/ssh/connect.c > connect.c $ gcc -o connect connect.c 编写一个简单的脚本文件。 #!/bin/sh # Filename: ~/bin/http-proxy-gw # This script connects to an HTTP proxy using connect.c connect -H http://yourproxyaddress:proxyport $@ 设置运行权限 $ chmod +x ~/bin/http-proxy-gw 现在,需要告诉git使用这个脚本访问代理服务器。 $ git config --global core.gitproxy "http-proxy-gw for kernel.org" 安装repo 确认你有一个bin目录在你home目录下,没有则创建一个,并设置它到PATH环境变量中。 $ cd ~ $ mkdir bin $ echo $PATH 下载repo,并给它可执行权限: $ curl http://android.git.kernel.org/repo >~/bin/repo $ chmod a+x ~/bin/repo 建立一个空目录保存Android 代码。 $ mkdir mydroid $ cd mydroid 获取manifest文件 $ repo init -u git://android.git.kernel.org/platform/manifest.git 按照命令提示输入name和address.如果你想提交code,输入一个Google account。 运行成功后应当提示如下信息。 repo initialized in /mydroid 开始下载Android source code, run $ repo sync 编译Android source code $ cd ~/mydroid $ export ANDROID_JAVA_HOME=$JAVA_HOME $ cd ~/mydroid

$ make 编译Android Kernel Building zImage Go into kernel directory $ cd ~/mydroid/kernel $ make msm_defconfig ARCH=arm $ make ARCH=arm CROSS_COMPILE=../prebuilt/linux-x86/toolchain/armeabi-4.2.1/bin/arm-eabi可以在 kernel/arch/arm/boot/目录下看到build好的zImage

5. 启动 等待源码编译成功后,在源码目录执行下面的命令,初始化环境变量 . build/envsetup.sh //注意输完 envsetup.sh 后需要按 Tab 下 执行 emulator & ,如果正确弹出模拟器窗口,恭喜你,成功了!
Tag 标签: ubuntu9.10 android 源代码编译

[经验分享 基于 android 源码进行开发 3--在 Ubuntu 下搭建 androidSDK 开发环境 经验分享] 经验分享 在

经过前两期的讲述,应该能够基于 VBOX 让 Ubuntu 跑起来啦:) 对于一个新手,面对着 Ubuntu,该干些什么?其实 Ubuntu 在现在能够流行就是它的图形用 户界面做的很好,这样很多习惯了 windows 操作的用户能够很快上手,但强烈推荐使用命 令行操作 Ubuntu; 下面是一本 Ubuntu 的电子书,才 120 页,对于快速入门 Ubuntu 很有帮助,也对后续的讲 解如何从 Google 的官方服务器下载及编译源码很有帮助; Ubuntu 部落 部落-Ubunt.Linux 初学者推荐用书 初学者推荐用书[www.TopSage.com].pdf (978.5 KB)

本期虽然和基于 android 源码开发关系不大,但搭建一个 Linux 下的 android SDK 开发环境 对熟悉 Ubuntu 有所帮助 首先解决 2 个问题: 1.无缝模式; 2.sharefolder;

1.无缝模式主要解决鼠标在 XP 和 vbox 之间切换很麻烦以及显示分辨率的问题;

未安装无缝模式时,如下图:

seamless mode 是灰色的; 要安装,首先点击如下图:

菜单的最后一项;

这样在桌面上就会出现一个 visualBox 的 ISO 图标; 进入 terminal,输入: [email=hanjt@hanjt-t400R27:/etc$]hanjt@hanjt-t400R27:/etc$[/email] cd /cdrom [email=hanjt@hanjt-t400R27:/cdrom$]hanjt@hanjt-t400R27:/cdrom$[/email] ls 32Bit 64Bit VBoxLinuxAdditions-amd64.run VBoxLinuxAdditions-x86.run VBoxWindowsAdditions.exe VBoxWindowsAdditions-x86.exe

AUTORUN.INF VBoxSolarisAdditions.pkg autorun.sh VBoxWindowsAdditions-amd64.exe [email=hanjt@hanjt-t400R27:/cdrom$]hanjt@hanjt-t400R27:/cdrom$[/email] /media/cdrom/VBoxLinuxAdditions-x86.run [sudo] password for hanjt: sudo

安装成功后,重新启动 Ubuntu,怎么样,是不用着比没安装增强功能之前爽多了?

2.sharefolder 注意:这里的源主机和目标主机没有直接交互,都是同 visualBox 进行交互,visualBox 相当 一个中介; Source host is WinXp,Target host is Ubuntu

在 visualBox->选中 Ubuntu810->设置,如下图:

右边有一个 add sharefolder 的蓝色小按钮,点击它,如下图:

弹出输入对话框,先在 windows 下新建一个目录,比如 sharefolder,然后在下图输入它们, 数据空间名称起名 share

在 Ubuntu 下建一个文件夹叫做 sharefolder, 在/etc/rc.local 写入: mount -t vboxsf share /home/hanjt/sharefolder 实践过程中碰到过协议错误的问题,是因为数据空间名也叫做 sharefolder,这样 mount 就是 mount -t vboxsf sharefolder /home/hanjt/sharefolder 因为 命令的执行 目录就是主 目录,而主 目录里面刚 好自己又新 建了一个文 件夹叫 做 sharefolder,所以冲突了,解决办法有 2: 1.不要叫做 sharefolder,叫个别的,比如 share

2.在别的目录下执行 mount 命令,避开 sharefolder 文件夹的冲突;

(下面这段与本期主题无关,随便看看就行 Source host is WinXp,Target host is WinXP: WinXp 是“用映射网络驱动器”的方式来和 visualBox 共享文件夹的; net use x: [url=file://vboxsvr/sharename]\\vboxsvr\sharename[/url] 实例:net use s: [url=file://vboxsvr/share]\\vboxsvr\share[/url] net use:表示是使用映射网络驱动器; x:驱动器盘符,不能使用“我的电脑”里面已经存在的盘符,例如,这里,我使用“s”盘; [url=file://vboxsvr/share]\\vboxsvr\share[/url]: 是在 visualBox 里面创建的共享数据空间, 位置 在 G:/sharefolder,起的名字是 share; )

好了,现在随便放个文件进 sharefolder,看看是不是实现了共享;

搭建 android SDK 开发环境需要的东东: 1.JDK6 2.Eclipse3.5 3.ADT 4.android SDK 具体到哪里下载它们我就不说了,只要在 windows 下搭建好了环境的都知道,只是注意这 里下载时要下载 for linux 版本的,别弄错了; 1.JDK 安装 Ubuntu7.1 之前使用 IceTea; Ubuntu8.04 之后使用 OpenJDK; 下面是 2 个官方介绍 https://help.ubuntu.com/community/Java

https://help.ubuntu.com/community/JavaInstallation

因为 sun 的 JDK6 部分是不开源的,所以 OpenJDK6 把 JDK6 完全变成了开源的;看到 Ubuntu8.1 版默认安装了 OpenJDK6;

JDK 下载地址: http://java.sun.com/javase/downloads/index.jsp 注意不要下成 jre 了;我第一次就下错了;

这里用的是(jdk-6u20-linux-i586.bin) 不推荐使用.RPM 因为在 Ubuntu 下 rpm 还要转成 deb 才能用,反而多了许多步骤。

下面是总结的具体的安装配置步骤: 1. 在上述 JDK 下载地址下载 JDK,我下的是 jdk-6u20-linux-i586.bin;这里注意不要下成 jre 的了; 2. 安装 JDK,我的安装目录是/usr/lib/jvm/java,初始 Ubuntu 系统是没有/jvm/java 目录的,需 要自己 mkdir; 2.1 mkdir jvm ,mkdir java 2.2 如果是在 windows 下下载的 JDK,需要把它放进 sharefolder; 2.3 移动 JDK 文件到/usr/lib/jvm/java 目录下面: sudo mv jdk…bin /usr/lib/jvm/java; 注意这里直接拷贝黏贴过去是不行的,因为 java 目录属于 root 权限; 2.4 执行 JDK 的安装: sudo /usr/lib/jvm/java/jdk1.6.0_12.bin 3. 修改环境变量: sudo gedit /etc/profile 在文件的最后面写入: #set java environment export JAVA_HOME=/usr/lib/jvm/java/jdk1.6.0_20 export JRE_HOME=/usr/lib/jvm/java/jdk1.6.0_20/jre export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH 保存退出; 4. 重启系统,测试安装是否成功: hanjt@hanjt-t400R27:~$ java -version java version "1.6.0_20" Java(TM) SE Runtime Environment (build 1.6.0_20-b02)

Java HotSpot(TM) Client VM (build 16.3-b01, mixed mode, sharing) 出现这些表示安装 JDK 成功,写一个 Java 文件进一步测试一下: hanjt@hanjt-t400R27:~$ cd temp hanjt@hanjt-t400R27:~/temp$ sudo gedit Test.java [sudo] password for hanjt: hanjt@hanjt-t400R27:~/temp$ cat Test.java public class Test{

public static void main(String[] args){

System.out.println("test successful");

} } hanjt@hanjt-t400R27:~/temp$ javac Test.java hanjt@hanjt-t400R27:~/temp$ java Test test successful 经测试,成功!

注意: 如果没有进行上述安装过程,那么输入: java –version 将会出现一大堆的包名,这些包都有 jdk 在里面,系统提示需要安装一个包称为默认的 jdk

在编译 android 源码时,需要安装 JDK5 而不是 JDK6,如下是更改默认 JDK 配置的方法: 1. 前提是先安装 JDKu12 以上的版本; 2. sudo gedit /etc/profile,更改 JAVA_HOME 和 JRE_HOME,改成 1.5 版的目录,然后重启系 统,OK。

2 Eclipse3.5 安装 安装过程和在 windows 下面一样,都是解压缩后直接可以使用;

下面是将 Eclipse 添加到桌面的方法:

右键 Desktop->Create Launcher…->,后面的就照着填进去,但有一个问题,就是图标没办 法用 Eclipse 的,浏览可用的图标都是 svg 格式的,而 Eclipse 自带的是 xpm 的,没办法, 因为联想到 Terminal 可以直接 add 到桌面,所以先把 Eclipse 添加到 Application 中去: sudo gedit /usr/share/applications/eclipse.desktop 写入: [Desktop Entry] Encoding=UTF-8 Name=Eclipse3.5 Comment=Eclipse Platform Exec=/home/hanjt/eclipse3_5/eclipse Icon=/home/hanjt/eclipse3_5/icon.xpm Teminal=false StartupNotify=true Type=Application Categories=Application;Development; 这样就在 Application 中创建了 Eclipse;

cd /usr/local/ $ sudo ~/arm-2007q3-51-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 . $ sudo tar arm-2007q3-51-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 此时会解压出来一个叫做 arm2007q3 的一个目录,这里面就是工具链了。 设置一下环境变量: $ export PATH=$PATH:/usr/local/arm2007q3/bin 好了,到此,基本的内核编译环境就搞好了。 4)现在是要得到 android 的内核编译参数的配置文件的时候了,该文

cp zxvf

)现在是要得到 android 的内核编译参数的配置文件的时候了,该文件需要从已经安装好的 android 的模拟器 中得到才行。所以安装 android 的 sdk 也是必须的,这一步不太明白的朋友可以参考我以 前发的 android 命令行体验的文章。 首先启动 android 模拟器,然后通过 adb 得到模拟器中提供的内核配置文件: $emulator & $adb pull /proc/config.gz . 这时候 adb 工具会连接模拟器,并从它里面下载一个叫做 config.gz 的文件到你的当前目 录下。 把它拷贝到你的 kernel 目录:

$cd ~/android/kernel $cp ~/config.gz . 解压缩该文件,并重命名为.config,这一步做了就可以跳过 make menuconfig 之类的内 核参数设置 动作了。 $gunzip config.gz $mv config .config 5)修改 kernel 目录中的 Makefile 文件,用 emacs 或 vi 打开该 Makefile 修改 CROSS_COMPILE 变量为: CROSS_COMPILE=arm-none-linux-gnueabi这个就是刚刚的下载和解压的工具链的前缀了, 旨在告诉 make, 在编译的时候要使用我们 的工具链。 在 Makefile 中注释掉 LDFLAGS_BUILD_ID 这个变量: 例如将如下定义: LDFLAGS_BUILD_ID = $(patsubst -Wl$(comma)%,%,\ $(call ld-option, -Wl$(comma)--build-id,)) 修改为: LDFLAGS_BUILD_ID= #LDFLAGS_BUILD_ID = $(patsubst -Wl$(comma)%,%,\ # $(call ld-option, -Wl$(comma)--build-id,)) 把它注释掉的原因是目前 android 的内核还不支持这个选项。--build-id 选项,主要是用 于在生成的 elf 可执行文件中加入一个内置的 id,这样在 core dump,或者 debuginfo 的时候就可以很 快定位这个模块是 哪次 build 的时候弄出来的。这样就可以避免,每次都把整个文件做一遍效验,然后才能得 到该文件的是由 哪次 build 产生的。对于内核开发者来说,这是很不错的想法,可以节约定位模块版本和其 影响的时间。 目前,该功能还出于 early stage 的状态,未来的 android 或许会支持,但至少目前的版 本是不支持的。 所以,用#注释掉即可,或者害怕不保险的话,就加入 LDFLAGS_BUILD_ID=空,这样 即使编译的时候用了, 也只是一个空格而已。 对这个--build-id 选项感兴趣的朋友,可以访问下面的网址, 它的作者已经解释得非常明白 了: http://fedoraproject.org/wiki/Releases/FeatureBuildId 6)终于可以开始 make 了。 $ make 不出意外的话, 应该整个过程都会非常顺利, 最终会在~/android/kernel/arch/arm/boot 目录下面 生成一个 zImage,这个就是我们要的内核映像了。


相关文章:
Android详细移植过程
Android详细移植过程_信息与通信_工程科技_专业资料。自己写的android的移植过程apt-get 设置好后,按照下面的步骤安装相关组件 Required Packages (Ubuntu 8.04) $ su...
安卓系统移植经验之谈,教你三分钟移植
安卓系统移植经验之谈,教你三分钟移植_计算机硬件及网络_IT/计算机_专业资料。...能静下心看懂这些步骤癿话,移植癿基本思路和方法就差丌多了。 只是移植癿环境...
Android移植简要教程
Android移植简要教程_电脑基础知识_IT/计算机_专业资料。Android移植简要教程其实移植并不难,主要看你有没有耐心。比如我拿 MOTO XT701 来举例 这里以目前 CM7 系列...
任意安卓移植ROM教程,超详细ROM技术学习
任意安卓移植ROM教程,超详细ROM技术学习_计算机软件及应用_IT/计算机_专业资料。...为大 家讲述如何移植小米(以下例子参考隔壁网站,在这里感谢”潇琪“)移植步骤:...
Android移植教程
Android移植教程_计算机软件及应用_IT/计算机_专业资料。Android 移植教程 2012-1-28 17:50| 发布者: 团支书| 查看: 43240| 评论: 35 摘要: 其实移植并不难...
Android内核移植过程
Android 内核移植步骤一、安装 androi 的配置环境: 系统平台:linux5.4 安装包: andriod 的 java 安装包 jre-6u29-linux-i586-rpm.bin android-sdk_r14-linux....
Android系统移植技术详解
Android 系统移植(一)-让 android 系统在目标平台 上运行起来 Android 系统由于用的是 linux 内核,因此内核移植和嵌入式 linux 内核移植差异不大,过程如下: (1)...
android移植
android移植_IT/计算机_专业资料。Andriod 移植 1.4.Android RIL 中初始化流程分析.../dev/ttyS0则是这个串口设备 的具体设备文件, 除了参数-d 外,还有-s 代表...
android驱动开发和移植详解
坚实基础,知其然也知其所以然;最后我们将通过深入浅出的案例学习驱动开发过程。...从具体功能上划分,Android 开发主要分为如下三个领域。 1. 移植开发移动电话...
[技术分享] 【转】安卓ROM移植基础教程
[技术分享] 【转】安卓ROM移植基础教程_计算机软件...按照上面过程操作,这个 rom 完全可以 开机进入系统的...安卓系统ROM DIY详细教程... 6页 免费 安卓ROM制作...
更多相关标签:
miui7移植详细教程 | miui移植详细教程 | ucgui移植详细 | rom移植详细教程 | 高通boot移植详细教程 | android 4g模块移植 | android 移植 | android系统移植 |