libxml交叉编译
❶ rk3288 linux可以安装jdk吗
准备工作
编译 Android 对机器的配置要求较高:
64 位 CPU
16GB 物理内存+交换内存
30GB 空闲的磁盘空间用于构建,源码树另外占用大约 8GB
官方推荐 Ubuntu 12.04 操作系统,实际上也可以采用更新的操作系统版本,只需要满足 http://source.android.com/source/building.html 里的软硬件配置即可。
编译环境的初始化可参考 http://source.android.com/source/initializing.html 。
安装 JDK 6:
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java6-installer
Ubuntu 12.04 软件包安装:
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 libgl1-mesa-glx:i386 \
g++-multilib mingw32 tofrodos gcc-multilib ia32-libs\
python-markdown libxml2-utils xsltproc zlib1g-dev:i386
Ubuntu 13.10/14.04 软件包安装:
sudo apt-get install git-core gnupg flex bison gperf libsdl1.2-dev \
libesd0-dev libwxgtk2.8-dev squashfs-tools build-essential zip curl \
libncurses5-dev zlib1g-dev pngcrush schedtool libxml2 libxml2-utils \
xsltproc lzop libc6-dev schedtool g++-multilib lib32z1-dev lib32ncurses5-dev \
lib32readline-gplv2-dev gcc-multilib libswitch-perl
安装 ARM 交叉编译工具链和编译内核相关软件包:
sudo apt-get install gcc-arm-linux-gnueabihf \
lzop libncurses5-dev \
libssl1.0.0 libssl-dev
下载 默认版 Android SDK
注意:如果你在 2014-12-11 之前下载过源码,请重新到云盘下载并更新。
由于 SDK 比较大,请选择以下云盘之一下载 firefly-rk3288_android4.4_git_20141211.tar.gz :
网络云盘
Google Drive
下载完成后先验证一下 MD5 码:
$ md5sum /path/to/firefly-rk3288_android4.4_git_20141211.tar.gz
firefly-rk3288_android4.4_git_20141211.tar.gz
确认无误后,就可以解压:
mkdir -p ~/proj/firefly-rk3288
cd ~/proj/firefly-rk3288
tar xf /path/to/firefly-rk3288_android4.4_git_20141211.tar.gz
git reset --hard
git remote add bitbucket https://bitbucket.org/T-Firefly/firefly-rk3288.git
以后就可以直接从 bitbucket 处更新:
git pull bitbucket master:master
也可以到 https://bitbucket.org/T-Firefly/firefly-rk3288/commits/branch/master 在线浏览源码。
另外,linux-rockchip 社区搭建了 Git 镜像服务器,详见这里。 如果要下载源码,请用以下命令(可选其它镜像服务器):
git clone -b firefly/master git://git.us.linux-rockchip.org/rk3288_r-box_android4.4.2_sdk.git
下载 PAD 版 Android SDK
PAD版SDK是具有PAD特性的SDK,可用于调屏,TP,支持横竖屏显示等。
由于 SDK 比较大,请选择以下云盘之一下载firefly-rk3288_pad_android4.4_git_20141218.tar.gz
网络网盘
Google Drive
下载完成后先验证一下 MD5 码:
$ md5sum /path/to/firefly-rk3288_pad_android4.4_git_20141218.tar.gz
firefly-rk3288_pad_android4.4_git_20141218.tar.gz
确认无误后,就可以解压: mkdir -p ~/proj/firefly-rk3288_pad
cd ~/proj/firefly-rk3288_pad
tar xf /path/to/firefly-rk3288_pad_android4.4_git_20141218.tar.gz
git reset --hard
git remote add bitbucket https://bitbucket.org/T-Firefly/firefly-rk3288.git
以后就可以直接从 bitbucket 处更新:
git pull bitbucket pad:pad
也可以到 https://bitbucket.org/T-Firefly/firefly-rk3288/commits/branch/pad 在线浏览源码。
编译内核
编译正式版(0930)开发板的内核:
cd ~/proj/firefly-rk3288/kernel
make firefly-rk3288_defconfig
make -j8 firefly-rk3288.img
编译公测版(0809)开发板的内核:
cd ~/proj/firefly-rk3288/kernel
make firefly-rk3288_beta_defconfig
make -j8 firefly-rk3288_beta.img
编译 Android
编译 Android:
cd ~/proj/firefly-rk3288
make -j8
./mkimage.sh
烧写分区映像
上一步骤的 ./mkimage.sh 会重新打包 boot.img 和 system.img, 并将其它相关的映像文件拷贝到目录 rockdev/Image-rk3288/ 中。以下列出一般固件用到的映像文件:
boot.img :Android 的初始文件映像,负责初始化并加载 system 分区。
kernel.img :内核映像。
misc.img :misc 分区映像,负责启动模式切换和急救模式的参数传递。
recovery.img :急救模式映像。
resource.img :资源映像,内含开机图片和内核的设备树信息。
system.img :Android 的 system 分区映像,ext4 文件系统格式。
请参照 如何升级固件 一文来烧写分区映像文件。
如果使用的是 Windows 系统,将上述映像文件拷贝到 AndroidTool (Windows 下的固件升级工具)的 rockdev\Image 目录中,之后参照升级文档烧写分区映像即可,这样的好处是使用默认配置即可,不用修改文件的路径。
打包成统一固件 update.img
在 Windows 下打包统一固件 update.img 很简单,按上一步骤将文件拷贝到 AndroidTool 的 rockdev\Image 目录中,然后运行 rockdev 目录下的mkupdate.bat 批处理文件即可创建 update.img 并存放到 rockdev\Image 目录里。
update.img 方便固件的发布,供终端用户升级系统使用。一般开发时使用分区映像比较方便。
❷ 新手请教~~~如何交叉编译libxml2,如何移植sqlite3到arm开发板!!!
先配置,然后使用交叉编译器编译,然后install到一个文件夹下,把install的内容拷贝到开发板文件系统的/usr或者/usr/local目录下!
❸ C做嵌入式开发
你应该从以下方向去学习:
一、工具的使用
1、学会使用vim/emacs,vim/emacs是linux下最常用的源码编辑具,不光要学会用它们编辑源码,还要学会用它们进行查找、定位、替换等。新手的话推荐使用vim,这也是我目前使用的文本编辑器。
2、学会makefile文件的编写规则,并结合使用工具aclocal、autoconf和automake生成makefile文件。
3、掌握gcc和gdb的基本用法。掌握gcc的用法对于构建一个软件包很有益处,当软件包包含的文件比较多的时候,你还能用gcc把它手动编译出来,你就会对软件包中各个文件间的依赖关系有一个清晰的了解。
4、掌握svn/cvs的基本用法。这是linux,也是开源社区最常用的版本管理系统。可以去试着参加sourceforge上的一些开源项目。
二、linux/unix系统调用与标准C库
系统调用应用软件与操作系统的接口,其重要性自然不用说,一定要掌握。推荐学习资料为steven先生的UNIX环境高级编程(简称APUE)。
三、库的学习
无论是在哪个平台做软件开发,对于库的学习都很重要,linux下的开发库很多,我主要介绍一下我常常用到的一些库。
1、glib库
glib 库是gtk+和gnome的基础库,并具是跨平台的,在linux、unix和windows下都可以用。glib库对于linux平台开发的影响就像 MFC对windows平台开发的影响一样,很多开源项目都大量的使用了glib库,包括gimp、gnome、gaim、evolution和 linux下的集群软件heartbeat.因为glib库自带有基本的数据结构实现,所以在学习glib库的时候可以顺便学习一下基本的数据结构(包括链表、树、队列和hash表)。
2、libxml库
libxml是linux平台下解析XML文件的一个基础库,现在很多实用软件都用XML格式的配置文件,所以也有必要学习一下。
3、readline库
readline 库是bash shell用的库,如果要开发命令行程序,那么使用readline库可以减少很多工作量,比如bash里的命令行自动补全,在readline里就已经有实现,当然你也可以用自己的实现替代库的行为。readline库有很多网站介绍的,只要google一下readline就可以找到一堆了。
4、curses库
curses 库以前是vi程序的一部分,后来从vi里提取出来成为一个独立的库。curses库对于编写终端相关的程序特别有用,比如要在终端某一行某一列定位输出,改变终端字体的颜色和终端模式。linux下的curses库用的是GNU实现的ncurses(new curses的意思)。
5、gtk+和KDE库
这两个库是开发GUI应用程序的基础库,现在linux下的大部份GUI程序都是基于这两个库开发的,对于它们 的学习也是很有必要的。
四、网络的学习
网络这个东西太宽了,推荐学习资料steven先生的UNIX网络编程(简称UNP)和TCP/IP协议详解,更进一步的话可以学习使用libnet编写网络程序。
❹ 编译libxml2.so而且编译出来的.so文件都是intel80386的,怎么改成ARM的
CC=arm-linux-gcc ./configure --host=arm-linux --prefix=/opt/arm-libxml
make
make install
1要有arm-linux-gcc编译器
2make install后会在prefix指定的地方放置include bin lib man share mans等目录
上面过程叫做交叉编译cross-compile
❺ 如何在32位ubuntu11.10 下编译android 4.0.1源码和goldfish内核
一准备工作
1安装javasdk6
(1)从jdk官方网站http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u29-download-513648.html下载jdk-6u29-linux-i586.bin文件。
(2)执行jdk安装文件
[html] view plain
$chmod a+x jdk-6u29-linux-i586.bin
$jdk-6u29-linux-i586.bin
(3)配置jdk环境变量
[html] view plain
$sudo vim /etc/profile
[html] view plain
#JAVAEVIRENMENT
exportJAVA_HOME=/usr/lib/java/jdk1.6.0_29
exportJRE_HOME=$JAVA_HOME/jre
exportCLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
exportPATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
保存后退出编辑,并重启系统。
2安装依赖包
[html] view plain
$sudo apt-get install git-core gnupg flex bison gperf build-essential\
zipcurlzlib1g-devlibc6-devlib32ncurses5-devia32-libs\
x11proto-core-devlibx11-devlib32readline5-devlib32z-dev\
libgl1-mesa-devg++-multilibmingw32tofrodospython-markdown\
libxml2-utils
3用repo工具下载源码
(1)初始化repo
[html] view plain
$cd ~
$mkdir bin
$curlhttps://dl-ssl.google.com/dl/googlesource/git-repo/repo>~/bin/repo
$chmod a+x ~/bin/repo
$exportPATH=$PATH:~/bin(导出环境变量)
(2)下载android最新源码
[html] view plain
$mkdir android
$cd android
$ repo init -u https://android.googlesource.com/platform/manifest -bandroid-4.0.1_r1
...(输入用户名和邮箱名)
$repo sync -j5
...(此处用5个线程开始下载源码,下载过程及其漫长,需要耐心等待)
二 编译源码
1开始编译
[html] view plain
$source build/envsetup.sh
includingdevice/samsung/maguro/vendorsetup.sh
includingdevice/samsung/tuna/vendorsetup.sh
includingdevice/ti/panda/vendorsetup.sh
includingsdk/bash_completion/adb.bash
$make-j4(此处用4个线程编译)
编译完成后,会看到类似的输出:
[html] view plain
Targetramdisk:out/target/proct/generic/ramdisk.img
Targetuserdatafsimage:out/target/proct/generic/userdata.img
Installedfilelist:out/target/proct/generic/installed-files.txt
2编译遇到的问题
编译错误:
[html] view plain
<命令行>:0:0:错误:“_FORTIFY_SOURCE”重定义[-Werror]
<built-in>:0:0:附注: 这是先前定义的位置
cc1plus:所有的警告都被当作是错误
make:*** [out/host/linux-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o]错误 1
原因:
因机器上的gcc版本过高,需替换成4.4.6重新进行编译。
解决方法:
1)安装4.4版本的gcc和g++
[html] view plain
$ sudo apt-get install gcc-4.4
$ sudo apt-get install g++-4.4
2)设置gcc版本,使gcc链接到gcc-4.4
[html] view plain
$ ls -l /usr/bin/gcc*
lrwxrwxrwx 1 root root 7 2011-11-01 23:56 /usr/bin/gcc -> gcc-4.6
-rwxr-xr-x 1 root root 224544 2011-10-06 05:47 /usr/bin/gcc-4.4
-rwxr-xr-x 1 root root 302104 2011-09-17 05:43 /usr/bin/gcc-4.6
$ cd /usr/bin
$ sudo mv gcc gcc.bak
$ sudo ln -s gcc-4.4 gcc
3)设置g++版本,使g++链接到g++-4.4
[html] view plain
$ sudo mv g++ g++.bak
$ sudo ln -s g++-4.4 g++
4)设置完毕后,重新进行编译即可
3从模拟器启动编译后的镜像文件
1)设置环境变量:
[html] view plain
export PATH=~/android/out/host/linux-x86/bin:$PATH
export ANDROID_PRODUCT_OUT=~/android/out/target/proct/generic
其中linux-x86/bin存放模拟器emulator工具,proct/generic存在编译后的镜像文件。
2)启动模拟器
[html] view plain
$emulator
emulator:WARNING: system partition size adjusted to match image file (162 MB >66 MB)
启动后的截图:
三 编译androidgoldfish内核
1)进入android4.0.1源码目录,下载goldfish内核源码
[html] view plain
$ mkdir kernel
$ cd kernel
$ git clone http://android.googlesource.com/kernel/goldfish.git
$ cd goldfish
$ git branch -a
* (no branch)
master
remotes/origin/HEAD -> origin/master
remotes/origin/android-goldfish-2.6.29
remotes/origin/master
$ git checkout remotes/origin/android-goldfish-2.6.29
2)修改Makefile
[html] view plain
goldfish$ gedit Makefile
修改
[html] view plain
ARCH ?=$(SUBARCH)
CROSS_COMPILE ?=
为
[html] view plain
ARCH ?=arm
CROSS_COMPILE ?=arm-eabi-
3)导出交叉编译器目录为环境变量
$ export PATH=$PATH:~/android/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin
4)编译内核
[html] view plain
goldfish$ make goldfish_armv7_defconfig
goldfish$ make
编译完成后,可看到类似如下的输出:
[html] view plain
OBJCOPY arch/arm/boot/zImage
Kernel: arch/arm/boot/zImage is ready
5)从模拟器中启动内核镜像
[html] view plain
$emulator -kernel ~/android/kernel/goldfish/arch/arm/boot/zImage &
启动模拟器后,可从Settings->System->AboutPhone中查看内核版本信息。
❻ apache在arm linux上的交叉编译,移植
当年做NAS方案的时候,我做过apche+php+mysql。
一般来说编译apache都不是单单的编译这个的,需要apache+php+libxml因为少了一个基本上配置apache很难办,尤其是arm-linux的时候。一般都是先编译apache然后不要install,编译完后要拷贝一个php5到mole目录,然后开始配置和编译php5。好了后再install apache。如果你要用mysql的话还要麻烦。