构建ARM Linux系统实践
2010-06-14 17:32
357 查看
构建ARM Linux系统实践
Cross Tool
http://www.kegel.com/crosstool/
下载交叉编译环境的脚本,修改
demo-arm9tdmi.sh
文件,并执行即可在设定的目录产生全套的
交叉编译环境。
demo-arm9tdmi.sh
支持的选项有
—nounpack
,
--nobuild
,
--testlinux
,
--gdb
,
--notest
。
Note
:脚本运行是可能存在的两个问题:
1)
本地
gcc
版本检测(不支持高于
4.1
的
gcc
,需要修改
Configure
文件,或做
gcc
到低版本的链接);
2
)
Makefile
生成的某个
.h
文件存在问题(记不清具体文件,双引号换行导致的编译错误,修改
Makefile
,添加两个
//
或去掉
//n
)。
ftp://ftp.arm.linux.org.uk/pub/armlinux/toolchain/ http://www.handhelds.org/download/projects/toolchain/
下载解压即可
Kernel
http://www.kernel.org/pub/linux/kernel
下载相应的内核
http://maxim.org.za/at91_26.html
下载补丁,支持
SAM9261-EK
板子
修改
/arch/arm/mach-at91rm9200/board-sam9261ek.c
文件
+.left_margin
=
48,
.right_margin
= 16,
+.upper_margin
= 31,
.lower_margin
= 12,
+.hsync_len
=
96,
.vsync_len
= 2,
-.left_margin
=
1,
.right_margin
= 33,
-.upper_margin
= 1,
.lower_margin
= 0,
-.hsync_len
=
5,
.vsync_len
= 1,
建立
make_arm
的脚本,将下面一句话写入,编译内核时,执行
./make_arm
即可。
make V=1 ARCH=arm CROSS_COMPILE=/opt/crosstool/gcc-4.1.0-glibc-2.3.2/arm-9tdmi-linux-gnu/bin/arm-9tdmi-linux-gnu-
$@
./make_arm menuconfig
--
配置内核。具体配置参照相关资料
./make_arm
--
编译内核,产生压缩的内核映象
./make_arm uImage
--
产生
Uboot
启动的内核映象
Rootfs
使用
busybox
构建根文件系统
http://www.busybox.net/downloads/
修改
Makefile
如下:
1)
ARCH
?= arm
2)
CROSS_COMPILE
?= /opt/crosstool/gcc-4.1.0-glibc-2.3.2/arm-9tdmi-linux-gnu/bin/arm-9tdmi-linux-gnu-
make
menuonfig;
make;make install
编译时可能存在错误,简单的方法是将对应的命令或选项在配置时屏蔽。
Note
:选中
Installation Options
的
Don't use /usr Applets links ...
将
/_install
目录下的
bin
,
sbin
目录拷贝到要建立的根文件系统目录下,然后建立
dev
,
etc
,
lib
,
proc
,
sys
,
tmp
等目
录。
1)
在
dev
目录下执行以下命令:
l
sudo mknod -m 666 ttyS0 c 4 64
l
sudo chown ruanyu ttyS0
l
sudo chgrp ruanyu ttyS0
l
ln -s ttyS0 console
2)
拷贝动态链接库
l
/opt/crosstool/gcc-4.1.0-glibc-2.3.2/arm-9tdmi-linux-gnu/arm-9tdmi-linux-gnu/lib
拷贝到根文件系统下的
lib
目录
l
以后编译的其他库文件都拷贝到该目录
Note
:如果库文件比较大,可以有
strip
将符号表剥离
3)
配置文件
l
passwd
root::0:0:root:/:/bin/sh
l
group
root:*:0:
l
inittab
::sysinit:/etc/init.d/rcS
::askfirst:/bin/sh
tty0::askfirst:-/bin/sh
::restart:/sbin/init
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount
-a -r
::shutdown:/sbin/swapoff
-a
l
fstab
proc
/proc
proc
default
0
0
sysfs
/sys
sysfs
default
0
0
#/dev/mtdblock/2
/mnt/app
jffs2
default
0
0
l
profile
HOME=/
PATH=/bin:/sbin:/usr/bin
l
init.d/rcS
#!/bin/sh
/bin/mount
-a
/bin/mount
-t tmpfs tmpfs /dev
/sbin/udevd
--daemon
/sbin/udevstart
ln -s
/dev/vc/0
/dev/tty0
ln -s
/dev/vc/1
/dev/tty1
ln -s
/dev/vc/2
/dev/tty2
ln -s
/dev/vc/3
/dev/tty3
/bin/mkdir
/dev/pts
/bin/mount
-t devpts devpts /dev/pts
/sbin/ifconfig
lo 127.0.0.1 up
/sbin/ifconfig
eth0 10.19.5.244 netmask
255.255.0.0 up
/sbin/route
add default gw 10.19.5.1
/sbin/telnetd
-l /bin/login
l
resolv.conf
nameserver 202.102.152.3
l
protocols --
拷贝即可
l
services -
拷贝即可
最后,创建
jffs2
跟文件系统:
mkfs.jffs2 -r
root-fs-base/ -o rootfs.img -e 0x20000 -n
创建
cramfs
或
yaffs
的方法大致相同。
根文件系统的创建是个比较繁琐的过程,按此过程应该可以顺利地创建基本的根文件系统。
Udev
修改
Makefile
如下:
CROSS_COMPILE
?= /opt/crosstool/gcc-4.1.0-glibc-2.3.2/arm-9tdmi-linux-gnu/bin/arm-9tdmi-linux-gnu-
make
将
udevd
、
udevstart
、
udevadm
拷贝到
bin
目录下
在
etc
下添加文件
/udev/rules.d/udev.rules
以及
/udev/udev.conf
/udev/rules.d/udev.rules
如下:
# vc devices
KERNEL=="tty[0-9]*",
NAME="vc/%n"
# block devices
KERNEL=="loop[0-9]*",
NAME="loop/%n"
# mtd devices
KERNEL=="mtd[0-9]*",
NAME="mtd/%n"
KERNEL=="mtdblock[0-9]*",
NAME="mtdblock/%n"
# input devices
KERNEL=="mice"
NAME="input/%k"
KERNEL=="mouse[0-9]*",
NAME="input/%k"
KERNEL=="ts[0-9]*",
NAME="input/%k"
KERNEL=="event[0-9]*",
NAME="input/%k"
# misc devices
KERNEL=="apm_bios",
NAME="misc/%k"
KERNEL=="rtc",
NAME="misc/%k"
BusyBox
中已经包含了
mdev
,简化的
udev
,此处可以不
用编译
udev
。
参见: http://hi.baidu.com/zengzhaonong/blog/item/b0895436d24c33dea2cc2b03.html
Tslib
./autogen.sh
echo
“ac_cv_func_malloc_0_nonnull=yes” > arm-linux.cache
./configure
–host=arm-9tdmi-linux-gnu –cache-file=arm-linux.cache –prefix=/opt/tslib
make;make
install
在目标机上设置以下环境变量:
export
TSLIB_CONSOLEDEVICE=none
export
TSLIB_FBDEVICE=/dev/fb0
export
TSLIB_TSDEVICE=/dev/input/ts0
export
TSLIB_CALIBFILE=/etc/pointercal
export
TSLIB_CONFFILE=/etc/ts.conf
export
TSLIB_PLUGINDIR=/lib/ts
ts.conf
如下:
module_raw h3600
module pthres pmin=1
module variance delta=30
module dejitter delta=100
module linear
Ipkg
Qt
设置环境变量:
export
QTEDIR=/home/ruanyu/Desktop/app/qt/qtopia-core-opensource-src-4.3.5
export QTDIR=$QTEDIR
export
PATH=$QTDIR/bin:$PATH
export
LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
编译:
拷贝
/mkspecs/qws/linux-arm-g++
,改成我们时候的编译器的名字
arm-9tdmi-linux-
gnu
,修改
qmake.conf
文
件中编译器相关的内容。
QMAKE_CC
,
QMAKE_CXX
,
QMAKE_LINK
,
QMAKE_LINK_SHLIB
,
QMAKE_AR
,
QMAKE_RANLIB
,
QMAKE_STRIP
此外,若编译时报错(
XXX
找不到),
可能还需要修改
io.pri
和
embedded.pri
两个文
件,将
linux
要编译的
文件直接
加入
SOURCE
中(编译
器名称不匹配引起的,导致部分文件没有编译,链接时找不到符号)。
./configure -release
-prefix /usr/qt-core -no-qvfb -no-qt3support -qt-gfx-linuxfb -xplatform
qws/arm-9tdmi-linux-
gnu -embedded
arm -depths 4,8,16,24,32 -fast -confirm-license
make;make install
Note
:目标机
fonts
目录与编译
时的安装目录一致。不知道是否有环境变量进行设置?
DirectFB
依赖:
zlib
,
freetype
,
libpng
,
jpeg-6b
,
DirectFB
,
DirectFB-example
zlib
CC=arm-9tdmi-linux-gnu-gcc
AR="arm-9tdmi-linux-gnu-ar rc" ./configure --prefix=/usr/gtk --shared
make;make install
freetype
CC=arm-9tdmi-linux-gnu-gcc
./configure --prefix=/usr/gtk --host=arm-9tdmi-linux-gnu
--build=i686-pc-linux-gnu
make:make install
libpng
CC=arm-9tdmi-linux-gnu-gcc
./configure --prefix=/usr/gtk --host=arm-9tdmi-linux-gnu
--build=i686-pc-linux-gnu
CFLAGS="-I$PREFIX/include"
LDFLAGS="-L$PREFIX/lib"
make;make install
libjpeg
修改
configure
文件。编
出动态链接库,需要
configure
时添加
—enable-shared
选项,会导致
ltonfig
出错。在
configure
中查找
ltconfig
,行后添加
host
即可(网上
没有
jpeg
的解决办
法,读脚本中找到的。但在编
DFB
时仍然无法找到动态链接库)。
CC=arm-9tdmi-linux-gnu-gcc
./configure --prefix=$PREFIX --host=arm-9tdmi-linux-gnu
–build=i686-pc-linux-
gnu
--exec-prefix=$PREFIX --enable-shared
make
CC=arm-9tdmi-linux-gnu-gcc CXX=arm-9tdmi-linux-gnu-g++
AR="arm-9tdmi-linux-gnu-ar rc"
STRIP=arm-9tdmi-linux-gnu-strip
LD=arm-9tdmi-linux-gnu-ld RANLIB=arm-9tdmi-linux-gnu-ranlib
make install;make
install-lib;make install-headers
DFB
CC=arm-9tdmi-linux-gnu-gcc
./configure --prefix=/usr/gtk --host=arm-9tdmi-linux-gnu
CFLAGS="-I/usr/gtk/
include"
LDFLAGS="-L/usr/gtk/lib" CPPFLAGS="-I/usr/gtk/include" --disable-x11
--enable-debug –disable-
voodoo --disable-mmx
--disable-see --disable-sdl --enable-jpeg --enable-png --disable-gif
--enable-freetype
--disable-video4linux
--disable-video4linux2 --with-gfxdrivers=none --with-tests
make; make install
DFB-eg
CC=arm-9tdmi-linux-gnu-gcc
./configure --prefix=/usr/gtk --host=arm-9tdmi-linux-gnu
--build=i686-pc-linux-gnu
make;make install
Note
:目标机上的
/directfb-1.2-0
位置与编
译安装时的
/usr/gtk/lib/directfb-1.2-0
相一致;
/irectfb-examples
位
置与编译安装时的
/usr/gtk/share/irectfb-examples
相一致。
Note
:配置文件
directfbrc
Note
:
DFB
早期的版本
不能自适应
frame
buffer
。
example
与
DFB
也是有对应关系的。
Gtk+DFB
依赖:
zlib
,
freetype
,
libpng
,
jpeg-6b
,
DirectFB
,
glib
,
atk
,
libxml2
,
fontconfig
,
cario
,
pango
,
gtk+
glib
在
configure
中找到
“cannot run test
program while cross compiling”
与
“cross-compiling”
,并把各
自所在行的下
方的
“{ (exit 1); exit 1; };”
去掉。
CC=arm-9tdmi-linux-gnu-gcc
./configure --prefix=/usr/gtk --host=arm-9tdmi-linux-gnu
--build=i686-pc-linux-gnu
make;make install
atk
修改
MakeFile
中的
glib_genmarshal
--> /usr/bin/glib_genmarshal
CC=arm-9tdmi-linux-gnu-gcc
./configure --prefix=/usr/gtk --host=arm-9tdmi-linux-gnu
--build=i686-pc-linux-gnu
--disable-glibtest
make;make install
libxml2
CC=arm-9tdmi-linux-gnu-gcc
./configure --prefix=/usr/gtk --host=arm-9tdmi-linux-gnu
--build=i686-pc-linux-gnu
--without-debug
--disable-static
make;make install
fontconfig
CC=arm-9tdmi-linux-gnu-gcc
./configure --prefix=/usr/gtk --host=arm-9tdmi-linux-gnu
--build=i686-pc-linux-gnu
--with-freetype-config=$PREFIX/bin/freetype-config
--disable-static --with-confdir=$PREFIX/etc/fonts –enable-
libxml2 --with-arch=arm
make;make install
cario
CC=arm-9tdmi-linux-gnu-gcc
./configure --host=arm-9tdmi-linux-gnu --build=i686-pc-linux-gnu --
prefix=$PREFIX --disable-xlib
--enable-ps=yes --enable-png=yes --enable-directfb --disable-win32
--without-x
--enable-freetype=yes
--enable-pdf=yes --enable-svg=yes LDFLAGS="-L$PREFIX/lib" CFLAGS="-
I$PREFIX/include"
make;make install
cairo.pc
的
Libs
添加:
-lfreetype
-lfontconfig -ldirectfb -lz -ldirect -lpng12 -lxml2 -lfusion
pango
CC=arm-9tdmi-linux-gnu-gcc ./configure
--host=arm-9tdmi-linux-gnu --build=i686-pc-linux-gnu --
prefix=$PREFIX --without-x LDFLAGS="-L$PREFIX/lib"
CFLAGS="-I$PREFIX/include" –enable-pangocairo
make;make install
pango.pc
的
Libs
添加:
-lglib-2.0 -lgmodule-2.0 -lgobject-2.0
pangocairo.pc
的
Libs
添加:
-lpangoft2-1.0
gtk+
拷贝
zconf.h
和
zlib.h
到
/usr/gtk/include/libpng12/
GLIB_GENMARSHAL=/usr/bin/glib-genmarshal
PKG_CONFIG=/usr/bin/pkg-config CC=arm-9tdmi-linux-gnu-
gcc ./configure --host=arm-9tdmi-linux-gnu
--build=i686-pc-linux-gnu --prefix=$PREFIX –with-
gdktarget=directfb
--without-libtiff --disable-glibtest --disable-largefile
--without-libjpeg LDFLAGS="-
L$PREFIX/lib"
CFLAGS="-I$PREFIX/include"
make;make install
Note
:目标板上一下路径与编译安装是一致。
/usr/gtk/lib/directfb-1.2-0
/usr/gtk/lib/gtk-2.0
/usr/gtk/lib/pango
Note
:执行以下命令
gdk-pixbuf-query-loaders
>/usr/gtk/etc/gdk_pixbuf.loaders
pango-querymodules
>/usr/gtk/etc/pango.modules
Note
:拷贝字体文件到
/usr/share/fonts
,路径由
fonts.conf
指定
Python
参照一下方法可以顺利完成
Python
的交叉编译
http://wiki.woodpecker.org.cn/moin/Cross_Compile_Python_2.5.2_For_ARM
目标板上设置环境变量
export
PYTHONHOME=/usr/lib/python2.5
export
PYTHONPATH=.:$PYTHONHOME:$PYTHONHOME/site-packages
export
PATH=$PATH:$PYTHONHOME:$PYTHONPATH
Gnash
依赖:
zlib
,
libpng
,
freetype
,
libjpeg
,
libxml2
,
libcurl
,
ffmpeg(O)
,
DirectFB
,
SDL
,
boost
,
agg
,
glib
,
check
,
gstreamer
,
gnash
libcurl
./configure
--prefix=/opt/gnash --host=arm-9tdmi-linux-gnu --build=i686-pc-linux-gnu
--without-ssl –with-
zlib=/opt/gnash/lib
make;make install
SDL
./configure
--prefix=/opt/gnash --host=arm-9tdmi-linux-gnu --enable-video-fbcon
--disable-video-x11 –disable-
dga --disable-esd
CFLAGS="-I/opt/gnash/include" LDFLAGS="-L/opt/gnash/lib" CPPFLAGS="-
I/opt/gnash/include"
make;make install
boost
ln -s /opt/crosstool/gcc-4.1.0-glibc-2.3.2/arm-9tdmi-linux-gnu/bin/arm-9tdmi-linux-gnu-g++
g++
ln -s /opt/crosstool/gcc-4.1.0-glibc-2.3.2/arm-9tdmi-linux-gnu/bin/arm-9tdmi-linux-gnu-ar
ar
ln -s /opt/crosstool/gcc-4.1.0-glibc-2.3.2/arm-9tdmi-linux-gnu/bin/arm-9tdmi-linux-gnu-ranlib
ranlib
ln -s /opt/crosstool/gcc-4.1.0-glibc-2.3.2/arm-9tdmi-linux-gnu/bin/arm-9tdmi-linux-gnu-as
as
ln -s /opt/crosstool/gcc-4.1.0-glibc-2.3.2/arm-9tdmi-linux-gnu/bin/arm-9tdmi-linux-gnu-ld
ld
export PATH=.:$PATH
bjam --prefix=/opt/gnash
--toolset=gcc install
agg
修改
Makefile.in.Linux
AGGLIBS=
-lagg -lSDL
AGGCXXFLAGS =
-O3 -I/opt/gnash/include/SDL -L/opt/gnash/lib
CXX =
arm-9tdmi-linux-gnu-g++
C =
arm-9tdmi-linux-gnu-gcc
#CXX = icc
LIB =
arm-9tdmi-linux-gnu-ar cr
make
check
echo
"ac_cv_func_malloc_0_nonnull=yes" > arm-linux.cache
echo
"ac_cv_func_realloc_0_nonnull=yes" >> arm-linux.cahce
./configure
--prefix=/opt/gnash --host=arm-9tdmi-linux-gnu –build=i686-pc-linux-gnu
–cache-file=arm-
linux.cache
make;make install
gstreamer
修改
configure
,
check
相关
./configure
--prefix=/opt/gnash --host=arm-9tdmi-linux-gnu --build=i686-pc-linux-gnu
CFLAGS="-
I/opt/gnash/include"
LDFLAGS="-L/opt/gnash/lib" –disable-tests
make;make install
gnash
修改
configure
,
CURL_LIBS="${ac_cv_path_curl_lib}
-lcurl"
./configure
--prefix=/opt/gnash --host=arm-9tdmi-linux-gnu --build=i686-pc-linux-gnu
--disable-plugin –disable-
debugger
--disable-glext --disable-klash --disable-cygnal --disable-menus
--disable-rpath --disable- docbook
--disable-shared
--enable-static --enable-gui=sdl --enable-renderer=agg –with-agg-
incl=/home/ruanyu/Desktop/gnash/agg-2.5/include
--with-agg-lib=/home/ruanyu/Desktop/gnash/agg-2.5/src
--with-libxml-incl=/opt/gnash/include/libxml2
--with-libxml-lib=/opt/gnash/lib –with-sdl-incl=/opt/gnash/include/
SDL/ --with-sdl-lib=/opt/gnash/lib –with-boost-
incl=/home/ruanyu/Desktop/gnash/boost-1.34.1/install/include/boost-1_34_1
–with-boost-
lib=/home/ruanyu/Desktop/gnash/boost-1.34.1/install/lib
--with-zlib-lib=/opt/gnash/lib –with-zlib-
incl=/opt/gnash/include --with-curl-lib=/opt/gnash/lib
--with-curl-incl=/opt/gnash/include –with-jpeg-lib=/opt/
gnash/lib --with-jpeg-incl=/opt/gnash/include
--with-png-incl=/opt/gnash/include/libpng12 –with-png-lib=/opt/
gnash/lib
--with-gstreamer-incl=/opt/gnash/include/gstreamer-0.10
--with-gstreamer-lib=/opt/gnash/lib –with-glib-
lib=/opt/gnash/lib –with-glib-incl=/opt/gnash/include/glib-2.0
make;make install
Note
:
boost
的版本
(建议使用
1.34.1
)
Note
:
boost
编译出的
库比较多,但
gnash
仅使用
三个,如下:
libboost_serialization-gcc41-1_34_1.so.1.34.1
libboost_date_time-gcc41-1_34_1.so.1.34.1
libboost_thread-gcc41-mt-1_34_1.so.1.34.1
Note
:将
/opt/gnash
目录下
/include
中的
glib
的头文
件,拷贝到
gstreamer
中
Bluez
依赖:
glib
,
expat
,
dbus
,
bluez
expat
./configure
--prefix=/home/ruanyu/Desktop/app/arm-bluez –host=arm-9tdmi-linux-gnu
make;make install
d-bus
修改
configure
,去掉
pie
有关的选项
echo
ac_cv_have_abstract_sockets=yes>arm-linux.cache
./configure
--prefix=/home/ruanyu/Desktop/app/arm-bluez --host=arm-9tdmi-linux-gnu
–cache-file=arm-
linux.cache
CFLAGS="-I/home/ruanyu/Desktop/app/arm-bluez/include" LDFLAGS="-
L/home/ruanyu/Desktop/app/arm-bluez/lib"
--with-xml=expat –with-x=no
make;make install
bluez
./configure
--prefix=/home/ruanyu/Desktop/app/arm-bluez --host=arm-9tdmi-linux-gnu
CFLAGS="-
I/home/ruanyu/Desktop/app/arm-bluez/include"
LDFLAGS="-L/home/ruanyu/Desktop/app/arm-bluez/lib"
--disable-pie
make;make install
Note
:目标板配置文件与安装目录相一致
Note
:
Dbus
需要
messagebus
的用户,
添加到
/etc/password
或
adduser
添加
Note
:
bluez
通信用的
Unix Socket
的目录为
/var/run/dbus
。可能需
要修改
system.conf
文件,
没有验证
。
Cross Tool
http://www.kegel.com/crosstool/
下载交叉编译环境的脚本,修改
demo-arm9tdmi.sh
文件,并执行即可在设定的目录产生全套的
交叉编译环境。
demo-arm9tdmi.sh
支持的选项有
—nounpack
,
--nobuild
,
--testlinux
,
--gdb
,
--notest
。
Note
:脚本运行是可能存在的两个问题:
1)
本地
gcc
版本检测(不支持高于
4.1
的
gcc
,需要修改
Configure
文件,或做
gcc
到低版本的链接);
2
)
Makefile
生成的某个
.h
文件存在问题(记不清具体文件,双引号换行导致的编译错误,修改
Makefile
,添加两个
//
或去掉
//n
)。
ftp://ftp.arm.linux.org.uk/pub/armlinux/toolchain/ http://www.handhelds.org/download/projects/toolchain/
下载解压即可
Kernel
http://www.kernel.org/pub/linux/kernel
下载相应的内核
http://maxim.org.za/at91_26.html
下载补丁,支持
SAM9261-EK
板子
修改
/arch/arm/mach-at91rm9200/board-sam9261ek.c
文件
+.left_margin
=
48,
.right_margin
= 16,
+.upper_margin
= 31,
.lower_margin
= 12,
+.hsync_len
=
96,
.vsync_len
= 2,
-.left_margin
=
1,
.right_margin
= 33,
-.upper_margin
= 1,
.lower_margin
= 0,
-.hsync_len
=
5,
.vsync_len
= 1,
建立
make_arm
的脚本,将下面一句话写入,编译内核时,执行
./make_arm
即可。
make V=1 ARCH=arm CROSS_COMPILE=/opt/crosstool/gcc-4.1.0-glibc-2.3.2/arm-9tdmi-linux-gnu/bin/arm-9tdmi-linux-gnu-
$@
./make_arm menuconfig
--
配置内核。具体配置参照相关资料
./make_arm
--
编译内核,产生压缩的内核映象
./make_arm uImage
--
产生
Uboot
启动的内核映象
Rootfs
使用
busybox
构建根文件系统
http://www.busybox.net/downloads/
修改
Makefile
如下:
1)
ARCH
?= arm
2)
CROSS_COMPILE
?= /opt/crosstool/gcc-4.1.0-glibc-2.3.2/arm-9tdmi-linux-gnu/bin/arm-9tdmi-linux-gnu-
make
menuonfig;
make;make install
编译时可能存在错误,简单的方法是将对应的命令或选项在配置时屏蔽。
Note
:选中
Installation Options
的
Don't use /usr Applets links ...
将
/_install
目录下的
bin
,
sbin
目录拷贝到要建立的根文件系统目录下,然后建立
dev
,
etc
,
lib
,
proc
,
sys
,
tmp
等目
录。
1)
在
dev
目录下执行以下命令:
l
sudo mknod -m 666 ttyS0 c 4 64
l
sudo chown ruanyu ttyS0
l
sudo chgrp ruanyu ttyS0
l
ln -s ttyS0 console
2)
拷贝动态链接库
l
/opt/crosstool/gcc-4.1.0-glibc-2.3.2/arm-9tdmi-linux-gnu/arm-9tdmi-linux-gnu/lib
拷贝到根文件系统下的
lib
目录
l
以后编译的其他库文件都拷贝到该目录
Note
:如果库文件比较大,可以有
strip
将符号表剥离
3)
配置文件
l
passwd
root::0:0:root:/:/bin/sh
l
group
root:*:0:
l
inittab
::sysinit:/etc/init.d/rcS
::askfirst:/bin/sh
tty0::askfirst:-/bin/sh
::restart:/sbin/init
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount
-a -r
::shutdown:/sbin/swapoff
-a
l
fstab
proc
/proc
proc
default
0
0
sysfs
/sys
sysfs
default
0
0
#/dev/mtdblock/2
/mnt/app
jffs2
default
0
0
l
profile
HOME=/
PATH=/bin:/sbin:/usr/bin
l
init.d/rcS
#!/bin/sh
/bin/mount
-a
/bin/mount
-t tmpfs tmpfs /dev
/sbin/udevd
--daemon
/sbin/udevstart
ln -s
/dev/vc/0
/dev/tty0
ln -s
/dev/vc/1
/dev/tty1
ln -s
/dev/vc/2
/dev/tty2
ln -s
/dev/vc/3
/dev/tty3
/bin/mkdir
/dev/pts
/bin/mount
-t devpts devpts /dev/pts
/sbin/ifconfig
lo 127.0.0.1 up
/sbin/ifconfig
eth0 10.19.5.244 netmask
255.255.0.0 up
/sbin/route
add default gw 10.19.5.1
/sbin/telnetd
-l /bin/login
l
resolv.conf
nameserver 202.102.152.3
l
protocols --
拷贝即可
l
services -
拷贝即可
最后,创建
jffs2
跟文件系统:
mkfs.jffs2 -r
root-fs-base/ -o rootfs.img -e 0x20000 -n
创建
cramfs
或
yaffs
的方法大致相同。
根文件系统的创建是个比较繁琐的过程,按此过程应该可以顺利地创建基本的根文件系统。
Udev
修改
Makefile
如下:
CROSS_COMPILE
?= /opt/crosstool/gcc-4.1.0-glibc-2.3.2/arm-9tdmi-linux-gnu/bin/arm-9tdmi-linux-gnu-
make
将
udevd
、
udevstart
、
udevadm
拷贝到
bin
目录下
在
etc
下添加文件
/udev/rules.d/udev.rules
以及
/udev/udev.conf
/udev/rules.d/udev.rules
如下:
# vc devices
KERNEL=="tty[0-9]*",
NAME="vc/%n"
# block devices
KERNEL=="loop[0-9]*",
NAME="loop/%n"
# mtd devices
KERNEL=="mtd[0-9]*",
NAME="mtd/%n"
KERNEL=="mtdblock[0-9]*",
NAME="mtdblock/%n"
# input devices
KERNEL=="mice"
NAME="input/%k"
KERNEL=="mouse[0-9]*",
NAME="input/%k"
KERNEL=="ts[0-9]*",
NAME="input/%k"
KERNEL=="event[0-9]*",
NAME="input/%k"
# misc devices
KERNEL=="apm_bios",
NAME="misc/%k"
KERNEL=="rtc",
NAME="misc/%k"
BusyBox
中已经包含了
mdev
,简化的
udev
,此处可以不
用编译
udev
。
参见: http://hi.baidu.com/zengzhaonong/blog/item/b0895436d24c33dea2cc2b03.html
Tslib
./autogen.sh
echo
“ac_cv_func_malloc_0_nonnull=yes” > arm-linux.cache
./configure
–host=arm-9tdmi-linux-gnu –cache-file=arm-linux.cache –prefix=/opt/tslib
make;make
install
在目标机上设置以下环境变量:
export
TSLIB_CONSOLEDEVICE=none
export
TSLIB_FBDEVICE=/dev/fb0
export
TSLIB_TSDEVICE=/dev/input/ts0
export
TSLIB_CALIBFILE=/etc/pointercal
export
TSLIB_CONFFILE=/etc/ts.conf
export
TSLIB_PLUGINDIR=/lib/ts
ts.conf
如下:
module_raw h3600
module pthres pmin=1
module variance delta=30
module dejitter delta=100
module linear
Ipkg
Qt
设置环境变量:
export
QTEDIR=/home/ruanyu/Desktop/app/qt/qtopia-core-opensource-src-4.3.5
export QTDIR=$QTEDIR
export
PATH=$QTDIR/bin:$PATH
export
LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
编译:
拷贝
/mkspecs/qws/linux-arm-g++
,改成我们时候的编译器的名字
arm-9tdmi-linux-
gnu
,修改
qmake.conf
文
件中编译器相关的内容。
QMAKE_CC
,
QMAKE_CXX
,
QMAKE_LINK
,
QMAKE_LINK_SHLIB
,
QMAKE_AR
,
QMAKE_RANLIB
,
QMAKE_STRIP
此外,若编译时报错(
XXX
找不到),
可能还需要修改
io.pri
和
embedded.pri
两个文
件,将
linux
要编译的
文件直接
加入
SOURCE
中(编译
器名称不匹配引起的,导致部分文件没有编译,链接时找不到符号)。
./configure -release
-prefix /usr/qt-core -no-qvfb -no-qt3support -qt-gfx-linuxfb -xplatform
qws/arm-9tdmi-linux-
gnu -embedded
arm -depths 4,8,16,24,32 -fast -confirm-license
make;make install
Note
:目标机
fonts
目录与编译
时的安装目录一致。不知道是否有环境变量进行设置?
DirectFB
依赖:
zlib
,
freetype
,
libpng
,
jpeg-6b
,
DirectFB
,
DirectFB-example
zlib
CC=arm-9tdmi-linux-gnu-gcc
AR="arm-9tdmi-linux-gnu-ar rc" ./configure --prefix=/usr/gtk --shared
make;make install
freetype
CC=arm-9tdmi-linux-gnu-gcc
./configure --prefix=/usr/gtk --host=arm-9tdmi-linux-gnu
--build=i686-pc-linux-gnu
make:make install
libpng
CC=arm-9tdmi-linux-gnu-gcc
./configure --prefix=/usr/gtk --host=arm-9tdmi-linux-gnu
--build=i686-pc-linux-gnu
CFLAGS="-I$PREFIX/include"
LDFLAGS="-L$PREFIX/lib"
make;make install
libjpeg
修改
configure
文件。编
出动态链接库,需要
configure
时添加
—enable-shared
选项,会导致
ltonfig
出错。在
configure
中查找
ltconfig
,行后添加
host
即可(网上
没有
jpeg
的解决办
法,读脚本中找到的。但在编
DFB
时仍然无法找到动态链接库)。
CC=arm-9tdmi-linux-gnu-gcc
./configure --prefix=$PREFIX --host=arm-9tdmi-linux-gnu
–build=i686-pc-linux-
gnu
--exec-prefix=$PREFIX --enable-shared
make
CC=arm-9tdmi-linux-gnu-gcc CXX=arm-9tdmi-linux-gnu-g++
AR="arm-9tdmi-linux-gnu-ar rc"
STRIP=arm-9tdmi-linux-gnu-strip
LD=arm-9tdmi-linux-gnu-ld RANLIB=arm-9tdmi-linux-gnu-ranlib
make install;make
install-lib;make install-headers
DFB
CC=arm-9tdmi-linux-gnu-gcc
./configure --prefix=/usr/gtk --host=arm-9tdmi-linux-gnu
CFLAGS="-I/usr/gtk/
include"
LDFLAGS="-L/usr/gtk/lib" CPPFLAGS="-I/usr/gtk/include" --disable-x11
--enable-debug –disable-
voodoo --disable-mmx
--disable-see --disable-sdl --enable-jpeg --enable-png --disable-gif
--enable-freetype
--disable-video4linux
--disable-video4linux2 --with-gfxdrivers=none --with-tests
make; make install
DFB-eg
CC=arm-9tdmi-linux-gnu-gcc
./configure --prefix=/usr/gtk --host=arm-9tdmi-linux-gnu
--build=i686-pc-linux-gnu
make;make install
Note
:目标机上的
/directfb-1.2-0
位置与编
译安装时的
/usr/gtk/lib/directfb-1.2-0
相一致;
/irectfb-examples
位
置与编译安装时的
/usr/gtk/share/irectfb-examples
相一致。
Note
:配置文件
directfbrc
Note
:
DFB
早期的版本
不能自适应
frame
buffer
。
example
与
DFB
也是有对应关系的。
Gtk+DFB
依赖:
zlib
,
freetype
,
libpng
,
jpeg-6b
,
DirectFB
,
glib
,
atk
,
libxml2
,
fontconfig
,
cario
,
pango
,
gtk+
glib
在
configure
中找到
“cannot run test
program while cross compiling”
与
“cross-compiling”
,并把各
自所在行的下
方的
“{ (exit 1); exit 1; };”
去掉。
CC=arm-9tdmi-linux-gnu-gcc
./configure --prefix=/usr/gtk --host=arm-9tdmi-linux-gnu
--build=i686-pc-linux-gnu
make;make install
atk
修改
MakeFile
中的
glib_genmarshal
--> /usr/bin/glib_genmarshal
CC=arm-9tdmi-linux-gnu-gcc
./configure --prefix=/usr/gtk --host=arm-9tdmi-linux-gnu
--build=i686-pc-linux-gnu
--disable-glibtest
make;make install
libxml2
CC=arm-9tdmi-linux-gnu-gcc
./configure --prefix=/usr/gtk --host=arm-9tdmi-linux-gnu
--build=i686-pc-linux-gnu
--without-debug
--disable-static
make;make install
fontconfig
CC=arm-9tdmi-linux-gnu-gcc
./configure --prefix=/usr/gtk --host=arm-9tdmi-linux-gnu
--build=i686-pc-linux-gnu
--with-freetype-config=$PREFIX/bin/freetype-config
--disable-static --with-confdir=$PREFIX/etc/fonts –enable-
libxml2 --with-arch=arm
make;make install
cario
CC=arm-9tdmi-linux-gnu-gcc
./configure --host=arm-9tdmi-linux-gnu --build=i686-pc-linux-gnu --
prefix=$PREFIX --disable-xlib
--enable-ps=yes --enable-png=yes --enable-directfb --disable-win32
--without-x
--enable-freetype=yes
--enable-pdf=yes --enable-svg=yes LDFLAGS="-L$PREFIX/lib" CFLAGS="-
I$PREFIX/include"
make;make install
cairo.pc
的
Libs
添加:
-lfreetype
-lfontconfig -ldirectfb -lz -ldirect -lpng12 -lxml2 -lfusion
pango
CC=arm-9tdmi-linux-gnu-gcc ./configure
--host=arm-9tdmi-linux-gnu --build=i686-pc-linux-gnu --
prefix=$PREFIX --without-x LDFLAGS="-L$PREFIX/lib"
CFLAGS="-I$PREFIX/include" –enable-pangocairo
make;make install
pango.pc
的
Libs
添加:
-lglib-2.0 -lgmodule-2.0 -lgobject-2.0
pangocairo.pc
的
Libs
添加:
-lpangoft2-1.0
gtk+
拷贝
zconf.h
和
zlib.h
到
/usr/gtk/include/libpng12/
GLIB_GENMARSHAL=/usr/bin/glib-genmarshal
PKG_CONFIG=/usr/bin/pkg-config CC=arm-9tdmi-linux-gnu-
gcc ./configure --host=arm-9tdmi-linux-gnu
--build=i686-pc-linux-gnu --prefix=$PREFIX –with-
gdktarget=directfb
--without-libtiff --disable-glibtest --disable-largefile
--without-libjpeg LDFLAGS="-
L$PREFIX/lib"
CFLAGS="-I$PREFIX/include"
make;make install
Note
:目标板上一下路径与编译安装是一致。
/usr/gtk/lib/directfb-1.2-0
/usr/gtk/lib/gtk-2.0
/usr/gtk/lib/pango
Note
:执行以下命令
gdk-pixbuf-query-loaders
>/usr/gtk/etc/gdk_pixbuf.loaders
pango-querymodules
>/usr/gtk/etc/pango.modules
Note
:拷贝字体文件到
/usr/share/fonts
,路径由
fonts.conf
指定
Python
参照一下方法可以顺利完成
Python
的交叉编译
http://wiki.woodpecker.org.cn/moin/Cross_Compile_Python_2.5.2_For_ARM
目标板上设置环境变量
export
PYTHONHOME=/usr/lib/python2.5
export
PYTHONPATH=.:$PYTHONHOME:$PYTHONHOME/site-packages
export
PATH=$PATH:$PYTHONHOME:$PYTHONPATH
Gnash
依赖:
zlib
,
libpng
,
freetype
,
libjpeg
,
libxml2
,
libcurl
,
ffmpeg(O)
,
DirectFB
,
SDL
,
boost
,
agg
,
glib
,
check
,
gstreamer
,
gnash
libcurl
./configure
--prefix=/opt/gnash --host=arm-9tdmi-linux-gnu --build=i686-pc-linux-gnu
--without-ssl –with-
zlib=/opt/gnash/lib
make;make install
SDL
./configure
--prefix=/opt/gnash --host=arm-9tdmi-linux-gnu --enable-video-fbcon
--disable-video-x11 –disable-
dga --disable-esd
CFLAGS="-I/opt/gnash/include" LDFLAGS="-L/opt/gnash/lib" CPPFLAGS="-
I/opt/gnash/include"
make;make install
boost
ln -s /opt/crosstool/gcc-4.1.0-glibc-2.3.2/arm-9tdmi-linux-gnu/bin/arm-9tdmi-linux-gnu-g++
g++
ln -s /opt/crosstool/gcc-4.1.0-glibc-2.3.2/arm-9tdmi-linux-gnu/bin/arm-9tdmi-linux-gnu-ar
ar
ln -s /opt/crosstool/gcc-4.1.0-glibc-2.3.2/arm-9tdmi-linux-gnu/bin/arm-9tdmi-linux-gnu-ranlib
ranlib
ln -s /opt/crosstool/gcc-4.1.0-glibc-2.3.2/arm-9tdmi-linux-gnu/bin/arm-9tdmi-linux-gnu-as
as
ln -s /opt/crosstool/gcc-4.1.0-glibc-2.3.2/arm-9tdmi-linux-gnu/bin/arm-9tdmi-linux-gnu-ld
ld
export PATH=.:$PATH
bjam --prefix=/opt/gnash
--toolset=gcc install
agg
修改
Makefile.in.Linux
AGGLIBS=
-lagg -lSDL
AGGCXXFLAGS =
-O3 -I/opt/gnash/include/SDL -L/opt/gnash/lib
CXX =
arm-9tdmi-linux-gnu-g++
C =
arm-9tdmi-linux-gnu-gcc
#CXX = icc
LIB =
arm-9tdmi-linux-gnu-ar cr
make
check
echo
"ac_cv_func_malloc_0_nonnull=yes" > arm-linux.cache
echo
"ac_cv_func_realloc_0_nonnull=yes" >> arm-linux.cahce
./configure
--prefix=/opt/gnash --host=arm-9tdmi-linux-gnu –build=i686-pc-linux-gnu
–cache-file=arm-
linux.cache
make;make install
gstreamer
修改
configure
,
check
相关
./configure
--prefix=/opt/gnash --host=arm-9tdmi-linux-gnu --build=i686-pc-linux-gnu
CFLAGS="-
I/opt/gnash/include"
LDFLAGS="-L/opt/gnash/lib" –disable-tests
make;make install
gnash
修改
configure
,
CURL_LIBS="${ac_cv_path_curl_lib}
-lcurl"
./configure
--prefix=/opt/gnash --host=arm-9tdmi-linux-gnu --build=i686-pc-linux-gnu
--disable-plugin –disable-
debugger
--disable-glext --disable-klash --disable-cygnal --disable-menus
--disable-rpath --disable- docbook
--disable-shared
--enable-static --enable-gui=sdl --enable-renderer=agg –with-agg-
incl=/home/ruanyu/Desktop/gnash/agg-2.5/include
--with-agg-lib=/home/ruanyu/Desktop/gnash/agg-2.5/src
--with-libxml-incl=/opt/gnash/include/libxml2
--with-libxml-lib=/opt/gnash/lib –with-sdl-incl=/opt/gnash/include/
SDL/ --with-sdl-lib=/opt/gnash/lib –with-boost-
incl=/home/ruanyu/Desktop/gnash/boost-1.34.1/install/include/boost-1_34_1
–with-boost-
lib=/home/ruanyu/Desktop/gnash/boost-1.34.1/install/lib
--with-zlib-lib=/opt/gnash/lib –with-zlib-
incl=/opt/gnash/include --with-curl-lib=/opt/gnash/lib
--with-curl-incl=/opt/gnash/include –with-jpeg-lib=/opt/
gnash/lib --with-jpeg-incl=/opt/gnash/include
--with-png-incl=/opt/gnash/include/libpng12 –with-png-lib=/opt/
gnash/lib
--with-gstreamer-incl=/opt/gnash/include/gstreamer-0.10
--with-gstreamer-lib=/opt/gnash/lib –with-glib-
lib=/opt/gnash/lib –with-glib-incl=/opt/gnash/include/glib-2.0
make;make install
Note
:
boost
的版本
(建议使用
1.34.1
)
Note
:
boost
编译出的
库比较多,但
gnash
仅使用
三个,如下:
libboost_serialization-gcc41-1_34_1.so.1.34.1
libboost_date_time-gcc41-1_34_1.so.1.34.1
libboost_thread-gcc41-mt-1_34_1.so.1.34.1
Note
:将
/opt/gnash
目录下
/include
中的
glib
的头文
件,拷贝到
gstreamer
中
Bluez
依赖:
glib
,
expat
,
dbus
,
bluez
expat
./configure
--prefix=/home/ruanyu/Desktop/app/arm-bluez –host=arm-9tdmi-linux-gnu
make;make install
d-bus
修改
configure
,去掉
pie
有关的选项
echo
ac_cv_have_abstract_sockets=yes>arm-linux.cache
./configure
--prefix=/home/ruanyu/Desktop/app/arm-bluez --host=arm-9tdmi-linux-gnu
–cache-file=arm-
linux.cache
CFLAGS="-I/home/ruanyu/Desktop/app/arm-bluez/include" LDFLAGS="-
L/home/ruanyu/Desktop/app/arm-bluez/lib"
--with-xml=expat –with-x=no
make;make install
bluez
./configure
--prefix=/home/ruanyu/Desktop/app/arm-bluez --host=arm-9tdmi-linux-gnu
CFLAGS="-
I/home/ruanyu/Desktop/app/arm-bluez/include"
LDFLAGS="-L/home/ruanyu/Desktop/app/arm-bluez/lib"
--disable-pie
make;make install
Note
:目标板配置文件与安装目录相一致
Note
:
Dbus
需要
messagebus
的用户,
添加到
/etc/password
或
adduser
添加
Note
:
bluez
通信用的
Unix Socket
的目录为
/var/run/dbus
。可能需
要修改
system.conf
文件,
没有验证
。
相关文章推荐
- 构建ARM Linux系统实践
- ARM-Linux移植之(四)——根文件系统构建
- ARM-Linux移植之(四)——根文件系统构建
- ARM-Linux移植之(四)——根文件系统构建
- ARM Linux 系统 (OK6410-A)开发环境构建 (一)
- ARM-Linux移植之(四)——根文件系统构建
- 构建arm linux 的根文件系统 root filesystem
- 嵌入式linux系统网络超级服务器构建指南(for arm)
- Spring构建应用系统的最佳架构与模式实践(1)
- arm移植NTP(同步嵌入式linux系统时间)
- 构建自己的Linux系统记录(四)
- ARM Linux系统调用过程
- 细说Linux系统优化-实践篇
- 从头构建Linux系统 之 本书使用包之原理解释
- ARM-Linux嵌入式系统开发基础
- LINUX在嵌入式系统上的实践和探讨
- step by step 构建嵌入式Linux系统平台
- Arm Linux系统调用流程详细解析
- [大型网站系统与Java中间件实践]--构建Java中间件的基础