移植android3.3到ZedBoard

follow doc:Android移植Guide1.3.pdf

follow website: http://elinux.org/Zedboard_Android

(1)在Ubuntu12.04LTS下安装编译所需环境:

sudo apt-get install git gnupg flex bison gperf build-essential \
zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \
libx11-dev:i386 libreadline6-dev:i386 libglapi-mesa:i386 libgl1-mesa-glx:i386  \
libgl1-mesa-dev g++-multilib mingw32 tofrodos  python-markdown \
libxml2-utils xsltproc zlib1g-dev:i386 uboot-mkimage gparted screen

(2)下载和安装jdk:

从以下网址下载jdk-6u45-linux-i586.bin

http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase6-419409.html

进入编译目录

chmod u+x jdk-6u45-linux-i586.bin

./jdk-6u45-linux-i586.bin

mkdir -p /usr/lib/jvm

mv jdk1.6.0_45 /usr/lib/jvm/

update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/jdk1.6.0_45/bin/java" 1

update-alternatives --install "/usr/bin/javac" "javac" "/usr/lib/jvm/jdk1.6.0_45/bin/javac" 1

update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/lib/jvm/jdk1.6.0_45/bin/javaws" 1

update-alternatives --install "/usr/lib/mozilla/plugins/libjavaplugin.so" "mozilla-javaplugin.so" "/usr/lib/jvm/jdk1.6.0_45/jre/lib/i386/libnpjp2.so" 1

//若是64位版,路径为/usr/lib/jvm/jdk1.6.0_45/jre/lib/amd64/libnpjp2.so
update-alternatives --config java

update-alternatives --config javac

update-alternatives --config javaws

update-alternatives --config mozilla-javaplugin.so

复制以下段落到~/.bashrc

JAVA_HOME=/usr/lib/jvm/jdk1.6.0_45/

JRE_HOME=${JAVA_HOME}/jre

export ANDROID_JAVA_HOME=$JAVA_HOME

export CLASSPATH=.:${JAVA_HOME}/lib:$JRE_HOME/lib:$CLASSPATH

export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin

export JAVA_HOME;

export JRE_HOME;

export CLASSPATH;

HOME_BIN=~/bin/

export PATH=${PATH}:${JAVA_PATH}:${HOME_BIN};

(3)下载Linux 源

git clone https://github.com/Digilent/linux-digilent.git

(4)下载Android Kernel

git clone https://android.googlesource.com/kernel/common -b android-3.3

在疆目录下建立bin目录并将其添加到path环境变量,并下载REPO脚本

mkdir ~/bin

export PATH=~/bin:$PATH

curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo

给repo加权限

chmod a+x ~/bin/repo

cd YourWorkspace

新建repo疆目录,repo将安装在此目录下,然后安装最新的repo(在2M网速下可能需要1天或更久)

repo init -u https://android.googlesource.com/platform/manifest

repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1

repo sync

准备BOOT.BIN(FSBL,SSBL,)。。。[Hardware Design Source folder]中有

wget http://www.digilentinc.com/Data/Products/ZedBoard/ZedBoard_Linux_Design.zip

解压后在sd_image目录下可以发现sd卡boot分区需要装载的所有文件

 

(5)kernel编译:

cd ~/android_for_zed

vi dev.sh

粘贴以下代码

#!/bin/bash

export CCOMPILER=arm-xilinx-linux-gnueabi-gcc

export ARCH=arm

export CROSS_COMPILE=arm-xilinx-linux-gnueabi-

export PATH=$PATH:/root/CodeSourcery/bin/

其中CodeSourcery是交叉编译工具链,自行去xilinux,git

cd ~/android_for_zed/linux-digilent

 

make digilent_zed_defconfig

sudo apt-get install build-essential

sudo apt-get install libncurses5

apt-get install libncurses5-dev

make menuconfig

Linux运行情况测试:

 

(6)编译安卓:

打开USB OTG键盘输入功能:

cd ~/android_for_zed/frameworks/base/policy/src/com/android/internal/policy/impl

vi PhoneWindowManager.java

cd ~/android_for_zed

source build/envsetup.sh

lunch generic-eng

make

 

error solving:

apt-get install gcc-4.4 g++-4.4 g++-4.4-multilib gcc-4.4-multilib

ls /usr/bin/gcc* –l

update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 50

update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.4 50

update-alternatives --config gcc

sudo apt-get install libncurses5-dev:i386

错误找不到libGL库:

ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so

编译成功:

 

(7)打包镜像

cd ~/android_for_zed/

vi Makefile.zynq

输入以下代码:

OUT_DIR:=out/target/product/generic

ROOT_IMG:=root.img

ROOTFS:=rootfs

ROOT_DIRS=lib/modules tmp media

.PHONY: dummy

$(ROOT_IMG): dummy

        rm -rf $@

        sudo rm -rf $(ROOTFS)

        cp -r $(OUT_DIR)/root $(ROOTFS)

        cp -r $(OUT_DIR)/system $(ROOTFS)

        cd $(ROOTFS) && mkdir -p $(ROOT_DIRS)

        sudo chown -R root:root $(ROOTFS)

        sudo genext2fs -d $(ROOTFS) -b $$((80*1024)) -m 0 -N $$((64*1024)) $(ROOT_IMG)

        sudo chown $(shell id -u):$(shell id -g) $(ROOT_IMG)

# Phony target forces the rootfs image file to be rebuilt on each make

dummy:

注意遵循Makefile语法,每行后面不能有空格,命令以Tab开头。

apt-get install genext2fs

make –f Makefile.zynq

这一步生成 root.img 文件系统镜像。

 

(8)准备运行

cd ~/android_for_zed/ready_to_download

gunzip ramdisk8M.image.gz

mkdir -p temp

mount ramdisk8M.image -o loop temp/

cd ~/android_for_zed/ready_to_download/temp/etc/init.d

vi rcS

echo "Mounting SD card to /mnt/sd"
mkdir -p /mnt/sd
mount /dev/mmcblk0p1 /mnt/sd
echo "++ Starting startup.sh script on SD card"
if [ -f /mnt/sd/startup.sh ]; then
./mnt/sd/startup.sh
fi

cd ~/android_for_zed/ready_to_download/

umount temp/

gzip ramdisk8M.image

vi startup.sh

粘贴下面的代码:

echo "++ Preparing for Android"
mkdir /mnt/root
mount -o loop /mnt/sd/root.img /mnt/root/
mount -t proc proc /mnt/root/proc
mount -t sysfs sys /mnt/root/sys
mount -t tmpfs tmp /mnt/root/data
mkdir -p /mnt/root/tmp/sd
mount /mnt/sd /mnt/root/tmp/sd
echo "++ Starting Android"
chroot /mnt/root /init
chmod 777 startup.sh
拷贝文件到SD卡:
BOOT.BIN 来自硬件工程
devicetree.dtb 来自硬件工程
ramdisk8m.image.gz 修改自硬件工程
root.img 安卓编译后产生

复制到sd卡ext分区
startup.sh 刚写的
zImage 来自linux内核编译

 

 

(9)运行问题解决方法

cp ~/android_for_zed/out/target/product/generic/obj/SHARED_LIBRARIES/gralloc.default_intermediates/LINKED/gralloc.default.so ~/android_for_zed/rootfs/system/lib/hw/

cd ~/android_for_zed/rootfs

vi vi init.rc

错误

zynq> chroot /mnt/root /init                                                   
[   97.420000] init: cannot open '/initlogo.rle'                               
[   97.480000] EXT4-fs (loop0): re-mounted. Opts: (null)                       
[   97.500000] init (695): /proc/1/oom_adj is deprecated, please use /proc/1/oo.

[   97.580000] init: cannot find '/system/bin/drmserver', disabling 'drm'      
[   97.630000] init: cannot find '/system/etc/install-recovery.sh', disabling ''

[   97.790000] init: untracked pid 1099 exited                                 
[   97.790000] init: untracked pid 1100 exited                                 
[   97.800000] init: untracked pid 1106 exited                                 
[   97.800000] init: untracked pid 1107 exited                                 
[  102.830000] init: untracked pid 1121 exited                                 
[  102.840000] init: untracked pid 1131 exited                                 
[  102.850000] init: untracked pid 1128 exited                                 
[  102.850000] init: untracked pid 1129 exited                                 
[  107.870000] init: untracked pid 1141 exited                                 
[  107.870000] init: untracked pid 1142 exited                                 
[  107.880000] init: untracked pid 1147 exited                                 
[  107.880000] init: untracked pid 1149 exited                                 
[  112.900000] init: untracked pid 1159 exited                                 
[  112.910000] init: untracked pid 1160 exited                                 
[  112.910000] init: untracked pid 1165 exited                                 
[  117.940000] init: critical process 'servicemanager' exited 4 times in 4 minue

�  117.950000] Restarting system with command 'recovery'.

在回到make menuconfig步骤看看, 在common外make clean 后会覆盖前面的设置。

VGA(HDMI)

[Hardware Design Source folder]:/root/android_for_zed/ZedBoard_Linux_Design/

[Xillinux sources folder] : /root/android_for_zed/xillinux-eval-zedboard-1.2/

(5)下载 Xillinux sources :

wget http://www.xillybus.com/downloads/xillinux-eval-zedboard-1.2.zip

cd ~/android_for_zed/

cp -r xillinux-eval-zedboard-1.2/system/pcores/xillyvga_v1_00_a/ ZedBoard_Linux_Design/hw/xps_proj/pcores/

cd ~/android_for_zed/ZedBoard_Linux_Design/hw/xps_proj/pcores/xillyvga_v1_00_a

mkdir netlist

安装ISE14.4

用ISE打开~/android_for_zed/xillinux-eval-zedboard-1.2/runonce

regenerate core

完成后:

cd ~/android_for_zed/

cp xillinux-eval-zedboard-1.2/runonce/vga_fifo.v ZedBoard_Linux_Design/hw/xps_proj/pcores/xillyvga_v1_00_a/hdl/verilog/

cp xillinux-eval-zedboard-1.2/runonce/vga_fifo.ngc ZedBoard_Linux_Design/hw/xps_proj/pcores/xillyvga_v1_00_a/netlist/

cp xillinux-eval-zedboard-1.2/cores/xillyvga_core.ngc ZedBoard_Linux_Design/hw/xps_proj/pcores/xillyvga_v1_00_a/netlist/

cd ~/android_for_zed/ZedBoard_Linux_Design/hw/xps_proj/pcores/xillyvga_v1_00_a/data

vi xillyvga_v2_1_0.pao

加入一行lib xillyvga_v1_00_a vga_fifo verilog

cd ~/android_for_zed/ZedBoard_Linux_Design/hw/xps_proj/pcores/xillyvga_v1_00_a/hdl/verilog

vi xillyvga.v

最后加入一段

FDCE vga_iob_ff[13:0] (

        .Q({vga_red, vga_green, vga_blue, vga_hsync, vga_vsync}),

        .D({vga_red_app[7:4], vga_green_app[7:4], vga_blue_app[7:4], vga_hsync_app, vga_vsync_app}),

        .C(vga_clk_app),

        .CE(1'b1),

        .CLR(1'b0)

);

在第69行修改

output [3:0] vga_blue,

  output [3:0] vga_green,

  output  vga_hsync,

  output [3:0] vga_red,

cd ~/android_for_zed/ZedBoard_Linux_Design/hw/xps_proj/pcores/xillyvga_v1_00_a/data/

vi xillyvga_v2_1_0.bbd

加入以下3行:

Files

#####

vga_fifo.ngc,xillyvga_core.ngc

vi xillyvga_v2_1_0.mpd

第90行那里,改三行:

PORT vga_red = "", DIR = O, VEC = [3:0]

PORT vga_green = "", DIR = O, VEC = [3:0]

PORT vga_blue = "", DIR = O, VEC = [3:0]

第7行后插入两行:

OPTION STYLE = MIX

OPTION RUN_NGCBUILDF = TRUE

用ISE的XPS打开~/android_for_zed/ZedBoard_Linux_Design/hw/xps_proj/system.xps如下图

点击BUS INTERFACE的TAB页

删除axi_hdmi_tx_16_b0, axi_iic_hdmi, axi_vdma_0共三项

打开system.mhs,修改152行去掉hdmi_int,

点IP Catalog ->Project local PCores ->User –> XILLYVGA

将VGA通过INTERCONNECT3链接到ZYNC,其他接线如图所示

点Ports->Xillvga_0,将如图所示几个端口MakeExernel

OK,Generate bitstream.

4 Prepare the kernel for Android

git log --pretty=oneline --format="%Cgreen%h %Creset%s" --grep="Linux 3.3." -n 20

显示20行:

7a84477 mtd: fix oops in dataflash driver

e2aa417 Merge tag 'v3.3-rc7' into gpio/next

fde7d90 Linux 3.3-rc7

192cfd5 Linux 3.3-rc6

d5a74af Merge tag 'iommu-fixes-v3.3-rc5' of git://git.kernel.org/pub/scm/linux/k

e0e5ce5 Merge branch 'imx/dt' of git://git.linaro.org/people/shawnguo/linux-2.6

a0008bf Merge branch 'lpc32xx/fixes-non-critical' of git://git.antcom.de/linux-2

f2273ec Merge branch 'lpc32xx/fixes' of git://git.antcom.de/linux-2.6 into fixes

a173fc6 Merge branch 'kirkwood/board' into next/boards

6b21d18 Linux 3.3-rc5

2daa79e Merge branch 'lpc32xx/drivers' into next/drivers

fa2c8f4 Merge tag 'v3.3-rc4' into for-3.4 in order to resolve the conflict resol

b01543d Linux 3.3-rc4

ffafe77 Merge branch 'v3.3-samsung-fixes-3' of git://git.kernel.org/pub/scm/linu

082f53c Merge branch 'for-arm-soc' of git://sources.calxeda.com/kernel/linux int

a08a499 Merge tag 'v3.3-rc3' as we've got several bugfixes in there which are co

d65b4e9 Linux 3.3-rc3

290436c Merge tag 'v3.3-rc2' into perf/core

177f72f Merge tag 'v3.3-rc2' into for-3.4

62aa2b5 Linux 3.3-rc2

以上源都含有Linux3.3.的字符

需要将patch放到Linux Kernel 顶层

git diff 192cfd5 HEAD > 3.3-rc6-to-Android.patch

有意个文件3.3-rc6-to-Android.patch出现在当前Linux根目录中了。

git apply --ignore-whitespace --ignore-space-change --check 3.3-rc6-to-Android.patch

git apply --ignore-whitespace --ignore-space-change --reject 3.3-rc6-to-Android.patch

Learn ZYNQ (3)的更多相关文章

  1. Learn ZYNQ(10) – zybo cluster word count

    1.配置环境说明 spark:5台zybo板,192.168.1.1master,其它4台为slave hadoop:192.168.1.1(外接SanDisk ) 2.单节点hadoop测试: 如果 ...

  2. Learn ZYNQ (9)

    创建zybo cluster的spark集群(计算层面): 1.每个节点都是同样的filesystem,mac地址冲突,故: vi ./etc/profile export PATH=/usr/loc ...

  3. Learn ZYNQ (8)

    在zed的PS端运行spark(已成功): (1)设置uboot为sd卡启动rootfs: "sdboot=if mmcinfo; then " \                 ...

  4. Learn ZYNQ (7)

    矩阵相乘的例子 参考博客:http://blog.csdn.net/kkk584520/article/details/18812321 MatrixMultiply.c typedef int da ...

  5. Learn ZYNQ Programming(1)

    GPIO LED AND KEY: part1:gpio leds and gpio btns combination. (include 1~4) part2:use gpio btns inter ...

  6. 大于16MB的QSPI存放程序引起的ZYNQ重启风险

    ZYNQ芯片是近两年比较流行的片子,双ARM+FPGA,在使用分立FPGA和CPU的场合很容易替代原来的分立器件. ZYNQ可以外接QSPI FLASH作为程序的存储介质. QSPI和SPI flas ...

  7. Atitit learn by need 需要的时候学与预先学习知识图谱路线图

    Atitit learn by need 需要的时候学与预先学习知识图谱路线图 1. 体系化是什么 架构 知识图谱路线图思维导图的重要性11.1. 体系就是架构21.2. 只见树木不见森林21.3. ...

  8. Python 爬取所有51VOA网站的Learn a words文本及mp3音频

    Python 爬取所有51VOA网站的Learn a words文本及mp3音频 #!/usr/bin/env python # -*- coding: utf-8 -*- #Python 爬取所有5 ...

  9. zynq学习01 新建一个Helloworld工程

    1,好早买了块FPGA板,zynq 7010 .终极目标是完成相机图像采集及处理.一个Window C++程序猿才开始学FPGA,一个小菜鸟,准备转行. 2,关于这块板,卖家的官方资料学起来没劲.推荐 ...

随机推荐

  1. SQL详解(下)

    约束 *约束是添加在列上的,用来约束列的! 1. 主键约束(唯一标识)  特点:非空,唯一,被引用  创建表时指定主键的两种方式,分别为:    CREATE TABLE stu(     sid   ...

  2. Android开发之ViewPager+ActionBar+Fragment实现响应式可滑动Tab

     今天我们要实现的这个效果呢,在Android的应用中十分地常见,我们可以看到下面两张图,无论是系统内置的联系人应用,还是AnyView的阅读器应用,我们总能找到这样的影子,当我们滑动屏幕时,Tab可 ...

  3. Java与.NET随笔

    .NET与Java,因这两种技术的相似性,总是会让人拿来做比较,并且总有人想让二者一分高下,最后得出孰优孰劣的结论.由于本人先用.NET,后转Java,现在.NET与Java二者并用,所以对二者间的差 ...

  4. wpf Popup Win8.0 bug HorizontalOffset 弹出位置偏移

    问题描述参考 wpf 客户端[JDAgent桌面助手]开发详解(四) popup控件的win8.0的bug 当开发完程序后,我们在多操作系统测试时候发现:win8.0  系统中 popup 弹出的位置 ...

  5. BestCoder Round #66 (div.2)

    构造 1002 GTW likes gt 题意:中文题面 分析:照着题解做的,我们可以倒着做,记一下最大值,如果遇到了修改操作,就把最大值减1,然后判断一下这个人会不会被消灭掉,然后再更新一下最大值. ...

  6. iOS 查找文件、遍历文件系统

    NSFileManager *manager = [NSFileManager defaultManager]; NSString *home = [@"~" stringByEx ...

  7. WordPress ”无法发送电子邮件,可能原因:您的主机禁用了mail()函数“的解决办法

    WordPress网站中出现 "无法发送电子邮件,可能原因:您的主机禁用了mail()函数"的情况一般都是因为所在主机环境不支持在线邮件收发功能导致,如果不支持的话,那么像类似 N ...

  8. Unity Standard Assets 简介之 2D

    这篇介绍2D资源包. 文件夹比较多,但是很多都是prefab的基础资源,所以我们只介绍 Prefabs 和 Scripts 文件夹. Prefabs文件夹: CharacterRobotBoy: 提供 ...

  9. unity MenuAnim.MoveTo

    移动函数,第一个参数是gameobject,第二个参数是pos,第三个参数是时间,第四个参数延迟 MenuAnim.MoveTo(title, new Vector3(1, 0.7f, 0), 0.5 ...

  10. BZOJ2080 : [Poi2010]Railway

    如果存在$k$使得$i<j<k$,且$a[k]<a[i]<a[j]$,那么$i$和$j$不能在一个栈中. 设$b[i]=\min(a[i..n])$,如果$b[j]<a[ ...