!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
本文档转载自朱老师大讲堂中教程朱老师大讲堂
第一步:网络环境搭建
1,在vmware workstation 编辑 —– 虚拟网络编辑器
Vmnet0——-桥接到———有线网卡
Vmnet1——-桥接到———无线网卡
注意区分各自电脑的有线网卡和无线网卡的名字
2,启动Ubuntu虚拟机
用户名:gigi
密码:rootroot
启动图形化界面命令startx
在虚拟机——-设置中 添加两个网卡,并自定义到vmnet0上和vmnet1上
此时在linux下会出现两个网卡eth0 和 eth1.
eth0 对应的 就是 有线网卡 eth1 对应的是无线网卡
PC上的有线网卡连接开发板,无线网卡连接一个AP(路由器或手机)。Eth1连接无线网卡的目的在于让ubuntu上网,如果没有必要上网,可以不用理会无线网卡。而有线网卡的目的是与开发板进行连接。然后进行IP配置
vim /etc/network/interfaces
Eth1自动获取IP,eth0为静态IP
我的虚拟机和window有线网卡,还有开发板的IP设置如下:
Windows(本地连接) ubuntu(服务器) 开发板
192.168.1.20 192.168.1.10 192.168.1.30
配置好后重启网卡即可,命令如下:
/etc/init.d/networking restart
Ifconfig查看如下:
第二步:开发板环境搭建
开发板我们需要准备三部分:uboot kernel rootfs。这三部分的源码在下面的目录中 /home/gigi/x210bsp
其中mk为编译脚本:
./mk -ui 编译uboot(针对inand) 生成uboot.bin
./mk -k 编译内核 生成zImage
2.1关于uboot:
此部分参考朱老师烧机部分,把uboot烧写到inand中。启动界面如下
并修改相应参数(使用下面命令修改)
set machid 0x998
set serverip 192.168.1.10
set gatewayip 192.168.1.1
set netmask 255.255.255.0
set ipaddr 192.168.1.30
set bootargs root=/dev/nfs nfsroot=192.168.1.10:/nfs_uplooking
ip=192.168.1.30:192.168.1.10:192.168.1.1:255.255.255.0::eth0:off
init=/linuxrc console=ttySAC2,115200
set bootcmd tftp 0x30008000 zImage \; bootm 0x30008000
save
print 查看如下结果:
2.2关于kerenl:
./mk -k 编译内核,生成生成zImage
为了使内核支持NFS挂载根文件系统,需要make menuconfig
[*] Networking support
Networking options
[*] TCP/IP networking
[*] IP: kernel level autoconfiguration
[*] IP: DHCP support
[*] IP: BOOTP support
config ROOT_NFS
bool “Root file system on NFS”
depends on NFS_FS=y && IP_PNP //需要IP_PNP的支持
help
把生成的zImage拷贝到/tftpboot目录下,tftpboot目录是tftp的下载目录
2.3关于rootfs:
利用busybox制作最小根文件系统(步骤略),已安装于/nfs_uplooking中,启动开发板,即可看到:
测试应用程序:在test中有一个app.c
/nfs_uplooking/test
利用arm-linux-gcc和gcc去编译app.c
arm-linux-gcc -o app_arm app.c
gcc -o app_x86 app.c
然后在开发板上运行 ./app_x86 ./app_arm
结果是两者都不能运行,第一个不能运行是原因是用X86的编译器编译的,第二个不能运行的原因是,板子的lib中没有C库。解决方法是添加C库或者静态编译
拷贝C库到lib中即可。
至此,环境搭建完毕。
说明:如果使用我给的虚拟机,上述所有的操作都已完成,只需要烧写uboot到开发板
第三步:QT环境搭建
QT是一个图形界面库框架。是跑在应用层上的一个软件,先了解一下QT相关的概念:
QT/E -> Qtopia-core -> Qt-embedded-opensource (基础类库)这三个是QT的基础类库,描述了画点线面之类的函数。这三个是一个概念,只不过在不同时期叫法不一样。现在的叫法是Qt-embedded-opensource。还一个有Qtopia,这个框架是应用于PDA,Phone的,它基于基础类库,多了一些工具类软件,如果我们只是在嵌入式开发板上运行一个QT程序,我们只需要去移植 Qt-embedded-opensource。控制台程序已不能满足大家的需求(主要是太Low^_^)
QT是纯软件层上的,但是也要有硬件的支持,图形界面库也需要交互,输入和输出。在嵌入式中,一般的输入设备是触摸屏,输出设备是显示屏。所以内核要有这两类设备的驱动程序。
3.1触摸屏驱动测试
cat /proc/bus/input/devices
可以看到触摸屏是在event2上,可以cat /dev/event2 测试触摸屏,也可以利用代码去测试
代码测试 /nfs_uplooking/test/ts.c
#include <stdio.h>
#include <linux/input.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main(void)
{
int fd;
struct input_event event;
fd = open("/dev/event2",O_RDWR);
if(fd<0)
{
perror("open");
return -1;
}
while(1)
{
read(fd,&event,sizeof(struct input_event));
printf("TYPE [%d]\n",event.type);
printf("CODE [%d]\n",event.code);
printf("VALUE[%d]\n\n",event.value);
}
}
3.2显示屏驱动测试
代码测试:/nfs_uplooking/test/fb.c
3.2 tslib移植
我们需要从触摸屏那里得到准确数据,可以用tslib进行采集。tslib能够为触摸屏驱动获得的采样数据提供诸如滤波、去抖、校准等功能,通常作为触摸屏驱动的适配层,为上层应用提供了一个统一的接口.tslib是基于input输入子系统及framebuffer子系统实现的.这部分主要是要用源码去完成编译,生成相应的库!(编译过程略),tslib源码在/home/gigi/x210bsp/tslib_x210_qtopia.tgz
http://m.blog.csdn.net/article/details?id=45787901
#define EV_VERSION 0x010000
把编译出来的文件安装到/nfs_uplooking/tslib210目录下
3.2 tslib移植
我们需要从触摸屏那里得到准确数据,可以用tslib进行采集。tslib能够为触摸屏驱动获得的采样数据提供诸如滤波、去抖、校准等功能,通常作为触摸屏驱动的适配层,为上层应用提供了一个统一的接口.tslib是基于input输入子系统及framebuffer子系统实现的.这部分主要是要用源码去完成编译,生成相应的库!(编译过程略),tslib源码在/home/gigi/x210bsp/tslib_x210_qtopia.tgz
http://m.blog.csdn.net/article/details?id=45787901
#define EV_VERSION 0x010000
把编译出来的文件安装到/nfs_uplooking/tslib210目录下
然后进行配置
tslib 运行时需要一个关键的ts.conf来设置采用哪一种驱动。另外还需要设定一些环境变量。当编译完tslib安装后,在安装目录的etc下有一个ts.conf的模板.如果是使用输入设备,则使用module_raw input.
cat /etc/profile (根文件系统下-新建)
export TSLIB_TSDEVICE=/dev/event2
export TSLIB_CALIBFILE=/tslib210/etc/pointercal
export TSLIB_CONFFILE=/tslib210/etc/ts.conf
export TSLIB_PLUGINDIR=/tslib210/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/tslib210/lib
export TS_INFO_FILE=/sys/class/input/input2/uevent
测试 /bin
./ts_calibrate
./ts_test
3.3 QT移植
编译过程大概两个小时左右,安装目录在/nfs_uplooking/arm-qt4-210
有兴趣的同学,可以参考编译文档完成QT和TSLIB的编译
编译完成后
在/etc/profile文件中写入
export QTDIR=/arm-qt4-210
export QWS_KEYBOARD=TTY:/dev/tty1
export QWS_MOUSE_PROTO=Tslib:/dev/event2
export QT_QWS_FONTDIR=
QTDIR/lib/fontsexportPATH=
QTDIR/bin:
PATHexportLDLIBRARYPATH=
TSLIB_ROOT/lib:
QTDIR/lib:
LD_LIBRARY_PATH
测试demo
arm-qt4-210/demos/embedded/fluidlauncher
缺少库就在交叉编译工具链的目录中找
在运行程序即可,缺少tmp文件夹。创建即可
运行效果如下:
第四步:安装QT Creator
第一步:安装QT Creator(IDE) 路径在/home/gigi/
./qt-sdk-linux-x86-opensource-2010.05.bin
第二步:设置环境
tools —> Options
在Qt versions中添加嵌入式的qmake工具
注意:QT移植完成之后,会在安装路径下的bin目录中生成qmake工具,我们用这个工具对QT编写的程序进行编译后,就可以在嵌入式系统上运行了
路径选择:/nfs_uplooking/arm-qt4-210/bin/qmake
第三步:切换编译器:
注意:先要clean all
第四步:执行应用程序 ./demo -qws