Ubuntu 项目完全遵从开源软件开发的原则;并且鼓励人们使用、完善并传播开源软件。也就是Ubuntu目前是并将永远是免费的。 然而,这并不仅仅意味着零成本,自由软件的理念是人们应该以所有“对社会有用”的方式自由地使用软件,本文用的开发板:YC2440-F-V5.1
1、ubuntu8.04开启root用户及设置中文界面
Ubuntu安装后,root用户默认是被锁定了的,不允许登录。对于桌面用户来说,这样安全性更高一些,是应该的。但做为嵌入式系统开发,则不是很合适。有时在编译程序时会遇到一些莫名其妙的问题。因此我们需要开启root用户。
步骤:
1、系统->系统管理->用户和组,选择root用户然后点击“属性”,设置root用户的密码;
2、系统>系统管理>登录窗口,点“安全”选项页,选择“允许本地管理员登录”。这样在登录时就可以root为用户名登录了。登录后看到的是英文界面,即便你已经安装了中文语言包。这时还需做以下设置才能出现中文界面。
- gedit ~/.profile
修改root下隐藏文件.profile,以下是修改过的。此后就成为中文桌面。# ~/.profile: executed by Bourne-compatible login shells. if [ "$BASH" ]; then if [ -f ~/.bashrc ]; then . ~/.bashrc fi fi mesg n # Installed by Debian Installer: # no localization for root because zh_CN.UTF-8 # cannot be properly displayed at the Linux console LANG="zh_CN.UTF-8" LANGUAGE="zh_CN:zh"
2、安装主机GCC编译器
编译qtopia时需要用到主机的GCC编译器,ubuntu默认是不带的,因此需要下载安装。在新立得软件包管理器中搜索GCC,然后选择安装。我安装的是GCC4.2版。
3、安装交叉编译器
(1)我用的交叉编译器是arm-linux-gcc 3.4.1版。
进入arm-linux-gcc-3.4.1.tar.bz2文件所在的目录
运行命令:
mkdir /usr/local/arm (如果您的pc端linux系统已经有这个文件夹,这步就跳过)
- tar -xjvf arm-linux-gcc-3.4.1.tar.bz2 -C /
- 然后运行命令gedit /etc/bash.bashrc
在最后加上一行PATH=$PATH:/usr/local/arm/3.4.1/bin
保存后关闭。
重新打开终端,如果输入命令arm-linux-gcc --version后能有版本显示则交叉编译环境已经建立了。
(2)修改编译器文件
- gedit /usr/local/arm/3.4.1/arm-linux/include/linux/videodev2.h 在 #define V4L2_PIX_FMT_HI240 v4l2_fourcc('H','I','2','4')
- /* 8 8-bit color */ 之后添加
- #define V4L2_PIX_FMT_SBGGR8 v4l2_fourcc('B','A','8','1') /* 8 BGBG.. GRGR.. */
按同样的方法修改arm-linux/sys_include/linux/videodev2.h
4、安装NFS
(1)安装nfs服务器端
- apt-get install portmap nfs-kernel-server
(2)配置共享文件
编辑/etc/exports,在其中增加要共享的目录
- gedit /etc/exports
配置
- /work/qtopia_arm/nfs *(rw,sync, no_root_squash)
/work/qtopia_arm/nfs是要共享的目录;*代表所有的客户机都可以挂接此文件系统;rw代表客户机以读写许可来挂接它们的根文件系统;no_root_squash 选项允许客户机以主机上的root身份挂接根文件系统。保存退出。
(3)重启服务
- /etc/init.d/portmap restart
- /etc/init.d/nfs-kernel-server restart
每当修改了/etc/exports都要重启服务以便修改生效。
5、安装一些库
在编译时可能会出现一些错误,提示缺少某些库,这时可以根据提示来下载安装缺少的库文件。每个人的主机环境都不太一样,因此缺少的库可能也不一样。
6、建立工作目录
创建 /work/qtopia_arm/nfs
并拷贝qtopia-opensource-4.3.2源码包到/work/qtopia_arm/目录下。
7、定义两个环境变量方便编译
- #export QTOPIA_INSTALL=/work/qtopia_arm/nfs
- #export QTOPIA_RUN_ON_TARGET=/mnt
QTOPIA_INSTALL为主机上qtopia最终的安装目录,这里将安装路径独立出来是为了方便在目标板上进行nfs挂载调试使用。
QTOPIA_RUN_ON_TARGET为qtopia在target板文件系统中的所在路径。如果采用NFS方式,一定要将qtopia挂载到QTOPIA_RUN_ON_TARGET指定的路径即/mnt ,因为qtopia运行的绝对路径已经被编译进可执行文件中。
8、修改部分源码
(1)拷贝编译目标需要的文件
- # cd /work/qtopia_arm/qtopia-opensource-4.3.2/src/libraries/qtopiabase/
- # cp custom-linux-generic-g++.h custom-linux-arm-g++.h
- # cp custom-linux-generic-g++.cpp custom-linux-arm-g++.cpp
Note: 这两个文件包含控制液晶屏亮度函数和一些优化qotpia core 的宏定义,用户可自己设定
(2)直接支持触摸屏而不使用外部库
- #gedit /work/qtopia_arm/qtopia-opensource-4.3.2/qtopiacore/qconfig-qpe.h
在最后添加宏定义
- #define QT_QWS_IPAQ
- #define QT_QWS_IPAQ_RAW
(3)修改时区信息读取路径
- #gedit /work/qtopia_arm/qtopia-opensource-4.3.2/qtopiacore/qconfig-qpe.h
在最后添加宏定义
- #define QTOPIA_ZONEINFO_PATH "/mnt/etc/zoneinfo/"
QTOPIA_ZONEINFO_PATH即时区文件所在的路径,这里对它进行修改是必要的。否则qtopia运行时候会到默认路径/usr/share/zoneinfo寻找时区文件。注意,这里的“/mnt”即qtopia在开发板文件系统中的所在路径,要和环境变量$QTOPIA_RUN_ON_TARGET一样。
9、生成Makefile文件
建立一个空文件Configure.sh,
并拷贝下列内容:
- echo "yes" | /work/qtopia_arm/qtopia-opensource-4.3.2/configure -edition phone -xplatform linux-arm-g++ -arch arm
- -no-qvfb -release -displaysize 480*272 -no-modem -launch-method quicklaunch –image /work/qtopia_arm/nfs
- -prefix /mnt -no-bluetooth -no-drm -no-infrared -extra-qt-config "-qt-zlib -qt-gif -qt-libpng -qt-libmng
- -qt-libjpeg" -extra-qtopiacore-config " -depths 16 -qt-mouse-linuxtp -no-mouse-pc -no-mouse-bus
- -no-mouse-yopy -no-mouse-vr41xx -no-mouse-tslib -no-mouse-qvfb" 2>&1 | tee logfile
注意:脚本文件要具有可执行属性才能执行,执行chmod +x Configure.sh。
注:1) 这里需要提的是qtopia交叉编译时默认是使用arm-linux-gcc编译的,从-xplatform 参数指定的路径linux-arm-g++下,我们可以找到qmake.conf文件,里面定义了交叉编译所使用的工具, QMAKE_CC默认为arm-linux-gcc。所以,若有人使用了其他名字的交叉编译工具,需要在qmake.conf文件进行修改或将编译工具连接为arm-linux-*也可以。
10、配置并编译
生成Makefile
- #cd /work/qtopia_arm
- #./configure.sh
编译并安装
- #make
- #make install
安装路径为$QTOPIA_INSTALL即/work/qtopia_arm/nfs
11、拷贝zoneinfo
默认安装时没有拷贝时区信息,需要手动拷贝
- #cp –rvf /work/qtopia_arm/qtopia-opensource-4.3.2/etc/zoneinfo /work/qtopia_arm/nfs/etc
12、运行qtopia
(1)启动好开发板后(内核+文件系统),挂载qtopia
- #mount -t nfs 192.168.1.101:/work/qtopia_arm/nfs /mnt -o nolock,rsize=1024,wsize=1024,timeo=15
主机IP地址设置为192.168.1.101,子网掩码255.255.255.0,网关192.168.1.1
开发板IP地址设置为192.168.1.168,子网掩码255.255.255.0,网关192.168.1.1
(2)设置环境变量
导入某些环境变量,使qtopia正常工作
在开发板上执行:
- #export PATH=/mnt/bin:$PATH
- #export LD_LIBRARY_PATH=/mnt/lib:$LD_LIBRARY_PATH
- #export QWS_MOUSE_PROTO=LinuxTP:/dev/h3600_tsraw
- #export QWS_DISPLAY="LinuxFb:mmWidth85:mmHeight48:0"
其中“mmWidthXX:mmHeightXX”为屏幕的可视面积大小,与具体的设备尺寸有关系
- 12.3运行qpe
- #qpe&
等target板LCD出现画面之后,启动触摸屏校正程序
- #qcop service send Launcher "execute(QString)" "calibrate"
校准完后会在/etc目录下生成Pointercal校准文件,每次触摸屏启动都会读取该文件内容进行触摸屏设定。还有一种方法是利用TSLIB库的校准程序来进行校准,将TSLIB交叉编译到目标机上,然后运行ts_calibrate程序。
校准完毕后就可正常使用qpe。
注意:
1、首先假定开发板触摸屏驱动工作正常。可以通过如下的办法简单的测试一下:
- #cat /dev/fb0
- #cat /dev/h3600_tsraw
如果报错则说明设备未能正确添加。需要先解决触摸屏驱动问题。
2、Qtopia运行时可能需要的一些额外库,
- cp -v libdl*so* $QTOPIA_INSTALL/lib/
- cp -v libpthread*so* $QTOPIA_INSTALL/lib/
- cp -v libstdc++*so* $QTOPIA_INSTALL/lib/
- cp -v libgcc_s*so* $QTOPIA_INSTALL/lib/
小结:Ubuntu 8.04下编译运行Qtopia 4.3.2过程的内容介绍完了,Ubuntu的推出,又给LINUX添加了新印象。最后希望本文对你有所帮助吧!