搜档网
当前位置:搜档网 › linux下bluez的移植

linux下bluez的移植

linux下bluez的移植
linux下bluez的移植

linux下bluez的移植~

bluez的移植可以用两个字概括:麻烦!原因是它不是单纯的bluez的编译,它还需要其他很多的库的支持,下面先列举一下这些库的麻烦依赖关系吧:

bluez-libs-3.36(不需要其他库)

bluez-utils-3.36:glib-2.16.5

dbus-1.0.2:libxml2-2.7.4

libsndfile-1.0.17

libusb-0.1.12

前面两个必须的,后两个看你的配置,bluez4也一样;

下面开始编译:

Bluez移植到arm s3c2410上

搞了好几天的蓝牙协议栈(bluez)的移植,现在终于有点小成就了,写下来和大家分享。以下介绍Bluez移植的基本步骤。

一,linux内核的配置

Linux 2.6版本之后的内核一般都有蓝牙模块的配置,所以你不用再打补丁了。由于我也是处于摸索阶段,所以我暂时用的是开发板上自带的内核。

#tar zxvf linux.2.6.*

解压缩内核,进入内核目录。在名令行输入

# make disclean/make clean/make rmproper,

选择这三个中的任意一个对内核进行清理,关于这三个命令的区别你可以google一下,然后自己去区分。

#make menuconfig/make config /make oldconfig /make xconfig

输入如这三个命令中的任何一个,对内核进配置,这几条命令的区别,请你自己google。推荐使用make menuconfig 。进入内核配置界面之后,根据你的自己的需要进行选择。关于内核的配置请单独查看内核配置方面的文档。

#make zImage ARCH=arm CROSS_COMPILE=arm-linux-

到此内核镜像就已经做好了。

二,编译bluez协议栈。

移植过蓝牙协议栈的人,肯定会觉得,Bluez协议栈的编译是最麻烦的一件事情。其实,如果你能理清楚bluez-utils所依赖的一些库,你就能很快的cross-compile交叉编译出一套能在开发板上跑起来的程序。关键是如何去理清楚协议,我总结出来的方法是,倒着推,你不知道bluez-utils依赖那些库,那就先直接编译bluez-utils,根据编译显示的错误,分析错误,找出来它所依赖的库,这样一步一步的分析下去,你就可以把蓝牙协议栈交叉编译出来。如果你不会分析错误或则不想去分析,可以,那你就直接把错误粘贴到网上,让搜索引擎给你找。

由于时间的仓促,这里我只列出我已经总结出来的Bluez所需要的几个库,以及几个

库编译的先后顺序。

注:/opt/libs 和/opt/utils是我自己编译时用的路径,你可以随便的选取。

1,编译安装bluez-lib-3.36.tar.gz

这个库不需要什么依赖,直接解压,配置,编译然后安装即可。

#tar zxvf bluez-lib-3.36.tar.gz

#./configure --profix=/opt/libs --host=arm-linux --target=arm-linux CC=arm-linux-gcc

#make

#make install

2,编译安装

这个库是后面的dbus依赖的,你也可以用expat来代替libxml2,官方网站上说dbus必须依赖于他们中的一个。

#tar zxvf libxml2-2.7.4.tar.gz

#./configure --profix=/opt/libs --host=arm-linux --target=arm-

linux CC=arm-linux-gcc

#make

#make install

3,编译安装dbus-1.0.2.tar.gz

#tar zxvf dbus-1.2.16.tar.gz

#echo ac_cv_have_abstract_sockets=yes>arm-linux.cache

#./configure --profix=/opt/libs --host=arm-linux --target=arm-

linux CC="arm-linux-gcc -I/opt/libs/include -L/opt/libs/lib" --cache-

file=arm-linux.cache --with-x=no

#make

#make install

4,编译安装glib-2.16.5

#tar -zxjf glib-2.16.5.tar.bz2

#echo ac_cv_type_long_long=yes>arm-linux.cache

#echo glib_cv_stack_grows=no>>arm-linux.cache

#echo glib_cv_uscore=no>>arm-linux.cache

#echo c_cv_func_posix_getpwuid_r=yes>>arm-linux.cache

#echo ac_cv_func_posix_getgrgid_r=yes>>

注意:">"和">>"的区别

#./configure --profix=/opt/libs --host=arm-linux --target=arm-linux CC="arm-linux-gcc -I/opt/libs/include -L/opt/libs/lib" --cache-file=arm-linux.cache

#make

#make install

5,编译安装libusb-0.1.12.tar.gz

这个库不需要什么依赖,直接解压,配置,编译然后安装即可。

#tar zxvf libusb-0.1.12.tar.gz

#./configure --profix=/opt/libs --host=arm-linux --target=arm-linux CC="arm-

linux-gcc -I/opt/libs/include -L/opt/libs/lib"

#make

#make install

6,编译安装bluez-utils-3.36.tar.gz

#tar zxvf bluez-utils-3.36.tar.gz

#./configure --profix=/opt/libs --host=arm-linux --target=arm-

linux CC="arm-linux-gcc -I/opt/libs/include -L/opt/libs/lib" --disable-audio #make

#make install

这样Bluez协议栈就编译好了。

三,烧写到开发板上

实际上放到板上的只需要

l2cap.o libbluetooth.so.2.11.2

start.sh libbluetooth.so

bnep.o libbluetooth.so.2

hci_usb.o

rfcomm.o

start.sh是启动模块的支持,也可以insmod进去,其他的是程序要用到的库。

可能遇到的错误及解决方法:

a、编译程序的时候

wen@wen-desktop:~$ arm-linux-gcc -I/home/wen/bluez/bluez-libs-

3.36_install/include -L/home/wen/bluez/bluez-

4.69/lib/.libs client.c -o

client_arm/tmp/ccGbPHFl.o(.text+0x38): In function `main':

: undefined reference to `hci_get_route'

/tmp/ccGbPHFl.o(.text+0x48): In function `main':

: undefined reference to `hci_open_dev'

/tmp/ccGbPHFl.o(.text+0xd4): In function `main':

: undefined reference to `str2ba'

collect2: ld returned 1 exit status

wen@wen-desktop:~$ arm-linux-gcc -I/home/wen/bluez/bluez-libs-

3.36_install/include -L/home/wen/bluez/bluez-

4.69/lib/.libs -lbluetooth

client.c -o client_arm

wen@wen-desktop:~$

-lbluetooth 就是代表-llibbluetooth.so -L <包含库的目录> -lbluetooth

就是找此目录下的libbluetooth.so或者libbluetooth.a去链接

b、libgmodule.so :invalid reconize

libgmodule.so在glib里面,再在配置文件中改为CC="arm-linux-gcc -L/

glib_lib_dir"

c、storage.c:286: error: `ENOKEY' undeclared (first use in this function)

在 bluez-utils-3.36/input/storage.c 中添加宏定义:#define ENOKEY 161

d、__libc_csu_init undefined reference to `__init_array_end'

配置文件里面的编译器加-shared为:CC="arm-linux-gcc -shared 。。。"

e、cc1: error: unrecognized command line option "-fvisibility=hidden

说是编译器版本太低的缘故。在高版本里面才支持"-Wno-pointer-sign"、"-

fvisibility=hidden"。

后来使用PC上的编译器(gcc版本4.4.1,而arm-linux-gcc是3.4.4)试了一下,就没出

现这个错误,由此可推断确实是编译器版本问题。既然低版本没有这个指令,我就删掉libusb-compat-0.1.3/libusb/Makefile里面的"-Wno-pointer- sign"和"-

fvisibility=hidden",之后OK(如果其他Makefile也有,也要删)。编完之后也要将库

和头文件复制到工具链里面去。

f、configure: error: Netlink library is required

解决方法: apt-get install libnl-dev and libnl-doc

h、解决安装glib的编译错误

stack pointer 问题:

echo ac_cv_type_long_long=yes>arm-linux.cache

echo glib_cv_stack_grows=no>>arm-linux.cache

echo glib_cv_uscore=no>>arm-linux.cache

echo ac_cv_func_posix_getpwuid_r=yes>>arm-linux.cache

i、configure: error: Could not find a glib-genmarshal in your PATH

网上:解压glib2-devel-2.4.7-1.tar.gz, 将文件复制到/usr/local下面

实际:$ sudo apt-get install libglib2.0-dev

原来下载个这东西就行了

j、checking for growing stack pointer... configure: error: cannot run test program while cross compiling

#echo ac_cv_type_long_long=yes>arm-linux.cache

#echo glib_cv_stack_grows=no>>arm-linux.cache

#echo glib_cv_uscore=no>>arm-linux.cache

#echo c_cv_func_posix_getpwuid_r=yes>>arm-linux.cache

k、checking for posix getpwuid_r... configure: error: in `/home/yan/glib-2.22.4':

configure: error: cannot run test program while cross compiling

See `config.log' for more details.

解决方法:ppcst# echo ac_cv_func_posix_getwuid_r=yes

l、源代码安装glib-2.22.5

root@zhupan-desktop:/home/zhupan/glib-2.22.5# ./configure

configure: error:

*** You must have either have gettext support in your C library, or use the

*** GNU gettext library. (https://www.sodocs.net/doc/c611773374.html,/software/gettext/gettext.html

解决:

i. 尝试 apt-get install gettex,错误,提示:E: 无法找到软件gettext

ii. 下载gettext-0.16.1安装

m、

configure: error: Netlink library is required

configure: error: dbus library is required

1、wen@wen-desktop:~/bluez/bluez-4.69$ export

DBUS_CFLAGS=/home/wen/bluez/libxml/include /libxml2/libxml

wen@wen-desktop:~/bluez/bluez-4.69$ export DBUS_LIBS=/home/wen/bluez/libxml/lib 2、把编译出来的两个lib的pkconfig里面的.pc放到/usr/lib/pkgconfig/里面,或者设置在PKG_CONFIG_PATH里面

n、. 编译D-Bus,can not run test program while cross compiling

[mystic@moolenaar]$ ./configure --host=arm-linux --prefix=/bluez/dbus CC=arm-linux-gcc

checking for getpeereid... no

checking abstract socket namespace... configure: error: cannot run test program while cross compiling

See `config.log' for more details.

执行./configure时要在宿主系统中运行一些测试程序,因为是交叉编译所以这个测试是一定通不过的。不过没问题,我们可以在configure时指定cache-file文件来屏障掉测试程

序,在下面编译glib包时会遇到同样的问题。

处理方法:

在源码包根目录下执行

[mystic@moolenaar]$ echo ac_cv_have_abstract_sockets=yes > arm-linux.cache [mystic@moolenaar]$ ./configure --host=arm-linux --prefix=/bluez/dbus CC=arm-linux-gcc --cache-file=arm-linux.cache

o./configure出现

checking for C compiler default output file name... configure: error: C compile cannot execulable

查看:config.log文件,发现是环境变量(LIBS LDFLAGS)设置错误,和lib

p、configure: error: libxml library is required

缺少xml库,下载编译安装后,copy libxml-2.0.pc /usr/lib/pkgconfig 就可以了。

q、/bin/rm: cannot remove `libtoolT': No such file or directory

Done configuring

libxml的配置出现以上问题;

解决:可以直接编译make,不影响

r、/tmp/ccs2uTxL.o(.text+0x38): In function `main':

: undefined reference to `hci_get_route'

/tmp/ccs2uTxL.o(.text+0x48): In function `main':

: undefined reference to `hci_open_dev'

/tmp/ccs2uTxL.o(.text+0xd4): In function `main':

: undefined reference to `str2ba'

collect2: ld returned 1 exit status

解决方法:

-lbluetooth

s、

client.c:3:22: bluetooth.h: No such file or directory

client.c:4:16: hci.h: No such file or directory

client.c:5:20: hci_lib.h: No such file or directory

client.c:6:19: rfcomm.h: No such file or directory

解决方法:

-I/头文件目录

t、[转]error: cannot run test program while cross compili

在交叉编译的时候总是使用configure --host=arm-linux 嘿嘿但是在CONFIGURE中有很多的

测试程序是不可以在HOST上运行的就会出现: error: cannot run test program while cross compiling

注意到abstract socket namespace在configure中查找abstract socket可以看到类似这样>的结构

echo "$as_me:$LINENO: checking abstract socket namespace" >&5

echo $ECHO_N "checking abstract socket namespace... $ECHO_C" >&6

if test "${ac_cv_have_abstract_sockets+set}" = set; then

echo $ECHO_N "(cached) $ECHO_C" >&6

其中ac_cv_have_abstract_sockets是我们要查找的变量

使用echo ac_cv_have_abstract_sockets=yes>arm-linux.cache

然后

./configure --host=arm-linux --cache-file=arm-linux.cache

OK这样就搞定了

u、问题:arm_linux -randlgcc cannoe found

解决办法:到root权限下make 并检查arm-linux-gcc 有没有加到PATH中

v、configure: error: GLib library version 2.14 or later is required

1 设置环境变量GLIB与LIBS, ./configure --help里面查看;

2 把编出来的库lib/pkconfig/*.pc放到/usr/lib/pkgconfig

qt程序在linux console模式下运行

Qt程序在linux Console模式下运行 原文链接:在x86非图形界面下运行QtEmbedded程序 众所周知,一般我们在桌面环境下可以使用qvfb这个工具作为运行QtEmbedded程序的模拟器环境,但我们今天不讲这些大家都知道的事情。 回顾一下QtEmbedded对系统以及硬件的要求,一般来说只有下面少少的几点: 1、 Linux内核+ framebuffer驱动+ socket支持 2、 /tmp可写 3、有合适的键盘和鼠标(触摸屏)驱动并做好与Qt的集成 4、合适的编译器和交叉编译工具链(toolchain) 那么聪明的同学已经想到了,为什么我们不能直接在桌面的linux系统中运行QtE程序呢?似乎QtE的要求我们的桌面系统一样可以满足亚。答案当然是肯定的。 一条一条来说的话, 1内核支持framebuffer和socket这一条大部分发行版默认的内核就可以; 2就不用说了;3在QtE的源码里自带了对普通桌面鼠标和键盘硬件的驱动;4对于X86系统,普通的gcc就可满足,一般linux发行版带的gcc版本也基本可以满足QtE编译的要求。 那么,怎么才能实现我们的想法呢?还是要一步一步按部就班来做。以笔者的Ubuntu 为例,介绍一下设置的具体步骤。 编译QtEmbedded 这一步编译和编译qvfb版本区别不大,只是不再需要configure的时候加-qvfb参 数,只用不加参数的configure足矣。 # tar -zxvf qt-em bedded-linux-opensource-src-4.5.1.tar.gz # cd qt-em bedded-linux-opensource-src-4.5.1 # ./configure -embedded x86 –qvfb // 我的编译情况是: ./confignre –prefix /work/Trolltech/QtEm bedded-4.5.1–no-o penssl # gmake # gmake install qt-em bedded 被安装在这个目录下/usr/local/Trolltech/QtEmbedded-4.5.1 设置环境变量: # vi ~/.bashrc 把下面的加上去 export QTEDIR=/usr/local/Trolltech/QtEm bedded-4.5.1 export PATH=/usr/local/Trolltech/QtEm bedded-4.5.1/bin:$PAT H export LD_LIBRARY_PATH=/usr/local/Trolltech/QtEm bedded-4.5.1/lib:$LD_LIBRA RY_PATH

linux系统编程试卷(答案)

凌阳教育 嵌入式培训系统编程部分测试试题 注:考试为闭卷,程序题需上机操作运行出结果,考试时间为120分钟 一:选择题(本题共4小题,每题3分共12分) 1)下列不是Linux系统进程类型的是( D ) A 交互进程 B 批处理进程 C 守护进程 D 就绪进程(进程状态) 2)以下对信号的理解不正确的是( B ) A 信号是一种异步通信方式 B 信号只用在用户空间进程通信,不能和内核空间交互 C 信号是可以被屏蔽的 D 信号是通过软中断实现的 3)进程有三种状态( C ) A 准备态、执行态和退出态 B 精确态、模糊态和随机态 C 运行态、就绪态和等待态 D 手工态、自动态和自由态 4)不是进程和程序的区别( B) A 程序是一组有序的静态指令,进程是一次程序的执行过程 B 程序只能在前台运行,而进程可以在前台或后台运行 C 程序可以长期保存,进程是暂时的 D 程序没有状态,而进程是有状态的 二:填空题(本题共6小题,2)、3)两题每空四分,其余每空一分。共23分) 1) 列举八种常见的进程间通信方式无名管道、有名管道、消息队列、信号量、共享内存、信号、套接字 网络上两个主机的进程间通信方式为套接字 2) 命名管道比无名管道的优势提供了一个可以访问的路径名,实现没亲缘关系的进程 间通信 3) 消息队列比命名管道和无名管道的优势可以按类型实现消息的随机查询,没必要先 进先出 4) 按照逻辑结构不同进行数据库划分,Sqlite 数据库属于哪一类关系型数据库 5) 在C语言中操作sqlite数据库,常用的2中方式是sqlite_exec(回调)、

sqlite_gettable(非回调) 6) 列举四种进程调度算法先来先调度(FCFS)、短进程优先调度(SPF)、高优先级调度 (HPF)、时间片轮转调度 三:问答题(本题共7题,每题5分,共35分) 1) 什么是系统调用?系统调用是通过什么方式陷入内核态的?请写出你对系统调用的理解。什么是文件I/O和标准I/O库?文件I/O和标准I/O库的区别? 系统调用是指操作系统提供给用户程序调用的一组特殊接口,用户程序可以通过这组接口获得操作系统内核提供的服务。 系统调用是通过软件中断方式陷入内核的 linux的文件I/O是由操作系统提供的基本IO服务, 标准I/O库通过封装系统调用,提供了一个到底层I/O的接口。 标准I/O默认采用了缓冲机制,还创建了一个包含文件和缓冲区相关数据的数据结构;文件I/O一般没有采用缓冲模式,需要自己创建缓冲区。一种是标准库封装系统调用而成,更高级,一种是系统提供的,比较低级;标准I/O可移植性高、文件I/O可移植性低。 2) 什么是进程?用fork()创建一个子进程时,系统会做什么工作 进程是具有独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配的单位,不仅是系统内部独立运行的实体也是独立竞争资源的实体。 用fork()时系统会分配子进程一个ID号然后继承父进程的地址空间,包括进程上下文进程堆栈打开的文件描述符等等,他就是父进程的一个复制品。 3) 进程和线程有什么区别? 每个独立的进程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在进程程中,由进程提供多个线程执行的控制。 进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源. 一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行。 4) 什么是线程的互斥和同步,程序应怎样写才能达到互斥或同步? 互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。 同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源。 在写程序时可以用互斥锁和信号量实现线程同步,一个线程访问共享资源时给这个资源上锁其他线程就不能访问了直到上锁的进程释放互斥锁为止。 5) 什么是僵尸进程?孤儿进程?守护进程? 僵尸进程:僵尸进程是指它的父进程已经退出(父进程没有等待(调用wait/waitpid)它),而该进程dead之后没有进程接受,就成为僵尸进程,也就是(zombie)进程。 孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成

i.MX6UL -- Linux系统移植过程详解(最新的长期支持版本)

i.MX6UL -- Linux系统移植过程详解(最新的长期支持版本) ?开发平台:i.MX 6UL ?最新系统: u-boot2015.04 + Linux4.1.15_1.2.0 ?交叉编译工具:dchip-linaro-toolchain.tar.bz2 源码下载地址: U-Boot: (选择rel_imx_4.1.15_1.2.0_ga.tar.bz2) https://www.sodocs.net/doc/c611773374.html,/git/cgit.cgi/imx/uboot-imx.git/ Kernel: (选择rel_imx_4.1.15_1.2.0_ga.tar.bz2) https://www.sodocs.net/doc/c611773374.html,/git/cgit.cgi/imx/linux-2.6-imx.git/ 源码移植过程: 1、将linux内核及uBoot源码拷贝到Ubuntu12.04系统中的dchip_imx6ul目录下; 2、使用tar命令分别将uboot和kernel解压到dchip_imx6ul目录下; 3、解压后进入uboot目录下,新建文件make_dchip_imx6ul_uboot201504.sh,且文件内容如下: ################################################################### # Build U-Boot.2015.04 For D518--i.MX6UL By FRESXC # ################################################################### #!/bin/bash export ARCH=arm export CROSS_COMPILE=/dchip-linaro-toolchain/bin/arm-none-linux-gnueabi - make mrproper # means CLEAN make mx6ul_14x14_evk_defconfig make2>&1|tee built_dchip_imx6ul_uboot201504.out 4进入kernel目录下,新建文件make_dchip_imx6ul_linux4115120.sh,且文件内容如下: ###################################################################

《Linux系统应用与开发教程》所有课后习题和答案

《Linux系统应用与开发教程》所有课后习题和答案 第1章Linux概述 (1) 第2章shell及常用命令 (4) 第3章vi编辑器的使用 (7) 第4章X Window系统的使用 (9) 第5章Linux系统的常用软件 (11) 第6章硬件管理 (11) 第7章网络基本配置 (12) 第8章常用网络服务的配置和使用 (15) 第9章系统管理与监控 (19) 第10章Linux系统的安全管理 (21) 第11章shell程序设计 (24) 第12章gcc的使用与开发 (26) 第13章gtk+图形界面程序设计 (27) 第14章Qt图形界面程序设计 (28) 第15章集成开发环境KDevelop的使用 (31) 第1章 Linux概述 1.什么是Linux? Linux是一套免费使用和自由传播的类UNIX操作系统,源代码开放,能运行于各类硬件平台,包括Intel x86系列和RISC处理器。这个系统是由世界各地成千上万的程序员设计和实现的。其目的是建立不受任何商品化软件的版权制约的、全世界都能自由使用的UNIX兼容产品。 2.Linux有哪些特性? (1)开放性 (2)多用户 (3)多任务 (4)良好的用户界面 (5)设备独立性 (6)丰富的网络功能

(7)可靠的系统安全 (8)良好的可移植性 3.Linux与Windows操作系统的主要区别是什么? (1)从发展的背景看,Linux是从一个比较成熟的操作系统发展而来的,而其他操作系统,如Windows等,都是自成体系,无对应的相依托的操作系统 (2)从使用费用上看,Linux是一种开放、免费的操作系统,Windows是封闭的系统,需要有偿使用。 (3)Linux上丰富的应用软件也是自由的,而在Windows下,几乎所有的软件都有独立的版权,需要购买使用,即使某些软件可以免费使用,也一般不提供其源代码,更不用说由用户修改扩充其功能了。 (4)Windows对硬件配置要求高,而Linux在低端PC系统上仍然可以流畅运行4.Linux与Unix的共同点与不同点是什么? 共同点:由于Linux是从Unix发展来到,它遵循Unix开放标准,基本支持同样的软件、程序设计环境和网络特性,可以说Linux是UNIX的PC版本,Linux在PC机上提供了相当于UNIX工作站的性能。 与商用Unix的不同点有:1)Linux是免费软件,用户可以从网上下载,而商用的UNIX除了软件本身的价格外,用户还需支付文档、售后服务费用;2)Linux拥有GNU软件支持,Linux能够运行GNU计划的大量免费软件,这些软件包括应用程序开发、文字处理、游戏等方面的内容;3)Linux的开发是开放的,任何志愿者都可以对开发过程做出贡献;而商用UNIX则是由专门的软件公司进行开发的。 与自由Unix的不同点: 1)在组织方式上,FreeBSD由它的核心团队(core team)的领导,他们负责原始程序的开发与维护。有core team的优点是原始程序会有一致性,会有组织的被更新,但是整个系统的活力操纵在core team手中,缺乏活力。Linux没有核心团队,在Linus的主导下来自世界各地的爱好者都可以发布自己的patch,缺点是源代码杂乱无章且可能会相互冲突。 2)在发展方向上,FreeBSD的核心团队将主要精力投入在UNIX自身的风格和特点上。Lin ux通常会首先加入商品化系统上的各种东西,比如新的硬件驱动、samba等。因此,从易用和可用上讲,Linux更容易上手和使用。 3)在系统核心功能上二者区别不大,但在Linux系统上,几乎可是找到任何需要的功能 4)在系统的性能上,据专家分析,FreeBSD在网络性能、软件移植性和系统规范化上略胜一畴,而在硬件支持、磁盘IO操作等方面Linux略强一些。 5.什么是GNU软件,什么是GPL和LGPL? GUN项目主要由自由软件基金资助的一个项目,目标是开发一个自由的、UNIX类型的操作系统,称为GNU系统。GNU是―GNU’s Not UNIX‖的首字母的递归缩写,目前使用Linux内

linux期末考试练习题

基础知识 linux系统的应用领域:嵌入式领域、应用服务器、软件开发、桌面应用 linux系统的特点:开放性、多用户、多任务、良好的用户界面、设备独立性、良好的可移植性、丰富的网络功能、可靠的系统安全 linux系统的组成:内核、shell、文件系统、应用程序 linux系统下的文件类型:普通文件、设备文件、目录文件、管道文件、链接文件 软链接文件与硬链接文件的区别:硬链接记录的是目标的inode,软链接记录的是目标的路径。软链接就像是快捷方式,而硬链接就像是备份。软链接可以跨分区的链接,而硬链接由于inode的缘故,只能在本分区中做链接。 Linux的目录结构:/、/home、/root、/bin、/sbin、/dev、/lib、/tmp、/mnt、/boot、/proc、/opt、/selinux、/var、/etc、/usr、/lost+found、/srv 关机与重启.shutdown(-k并不真正关闭,只是发出警告信息给所有用户,-r关闭后立即重启,-h关闭后不重启,-f快速关闭,重启时不进行磁盘检测,-n快速关闭,不经过init程序关机,-c中断关闭系统,[-time]设定关闭前的时间)halt(-w并不是真正关闭或重启,只是写“wtmp “记录,-d不写”wtmp“记录,-f没调用“shutdown”而强制关闭或重启,-i关闭或重启前关掉所有的网络接口,-p该选项为缺省选项,即“power off”)root重启init 0关闭 init 1重启Man手册与help:使用man手册页、使用help命令、whereis命令(b只查找二进制文件,m查找主要文件,s查找来源,u查找不常用的记录文件) 什么是shell:Shell就像一个壳层,这个壳层介于用户和操作系统之间,负责将用户的命令解释为操作系统可以接收的低级语言,并将操作系统响应的信息以用户可以了解的方式来显示。使用;命令先执行命令1,不管命令1是否出错,接下来执行命令2,使用&&命令只有当命令1正确运行完毕后才能执行命令2,命令别名alias,取消别名unalias,输出重定向command > file输入重定向command < file错误重定向command 2> fie追加重定向command >> file同时实现输出和错误重定向command &> file 基础命令 Pwd显示工作目录路径,cd更改工作目录路径,ls列出子目录和文件信息,touch创建空文件、更改文件或目录时间,mkdir创建目录,rmdir删除空目录(-p递归删除目录),cp复制文件和目录,mv移动或更名现有文件或目录(-i系统询问,-f不询问),rm删除文件或目录(-f忽略不存在的文件,不给出提示,-r将参数中列出的全部目录和子目录均递归删除,-i提示是否删除),wc统计文件字节数、字数或行数(-l统计行数,-w统计单词数,-c统计字符数),ln创建链接文件(-s 创建软链接),cat显示文本文件(-n由1开始编号,-b对非空行编号,-s连续两行以上的空白行替换为一行空白行),more分页显示文本文件(按空格键显示下一页,按b返回上一页),less回卷显示文本文件,head显示指定文件前若干行(-n显示开头的几行,默认为前10行,-q表明不显示文件名的首部,-v表明要显示文件名的首部),tail查看文件末尾数据(+num从num行以后开始显示文件内容,-num从距文件末尾num行处开始显示文本内容,默认为后10行,-c以字节为计数单位显示文本文件),sort对文件中的数据进行排序(-m若给定文件已经排好序,合并文件,-c检查给定文件是否已排好序,若都没有排好序,则打印一个出错信息,并以状态值1退出,-u 对排序后认为相同的行只留其中一行,-d按字典顺序排,-f将小写与大写同等对待,-I忽略非打印字符,-r按逆序输出排序结果),uniq将重复行从输出文件中删除(-c在每行行首加上本行在文件中出现的次数,-d只显示重复行,-u只显示不重复行),cut从文件每行中显示出选定的字节、字符或字段,comm比较两个已排过序的文件(-1不显示只在第1个文件里出现过得行,-2不显示只在第二个文件里出现的行,-3不显示只在第1和2文件里出现过得行),diff逐行比较两个文本文件,列出其不同之处(-b忽略行尾的空格,-c采用相异之处的上下文输出格式,-e采用一个合法的ed脚本作为输出,-r当file1和file2是目录时,递归作用到各文件和目录上),grep查找文件中符合条件的字符串,find列出文件系统中符合条件的文件或目录(-name按文件名查找文件,-perm按照文件权限查找,-user按文件属性,-group按文件所属的组,-cmin n在过去n分钟内被修改过的文件,-ctime n在过去n天内被修改过的文件,-size n大小为n的文件,-type查找某一类型的文件),locate在数据库中查找文件,whereis查找指定文件、命令和手册页位置,file 查询文件类型,whatis查询命令功能,which显示可执行命令路径,uname显示计算机及操作系统相关信息(-a显示全部信息,-m显示计算机硬件类型,-n显示在网络上的主机名称,-r显示操作

嵌入式Linux系统移植试题

嵌入式Linux系统移植试题(时间:1个半小时) 一、选择题(每题2分,共50分,包括单选和多选,多选、少选均不得分) 1.嵌入式linux系统软件部分一般包括() [A] bootloader[B] linux内核[C] 根文件系统[D]用户应用程序 2.一般情况下,在搭建嵌入式linux开发环境时主机需要安装的软件有() [A] 串口通信软件[B] tftp服务器[C] nfs服务器[D]usb 3.下列选项中符合gcc的编译流程的是( ) [A] 预处理->编译->汇编->连接[B] 预处理->汇编->编译->连接[C] 编译->预处 理->汇编->连接[D预处理->连接->汇编->编译 4.gcc使用下列哪个选项可以查看编译的详细过程() [A] -o[B] -v [C] -E [D] -g 5.下列二进制工具哪个是丢弃目标文件的全部或者特定符号,减少文件体积的() [A] size[B] as [C ] nm [D ] strip 6.下列二进制工具哪个是用来反汇编的() [A] nm[B] objdump [C ] objcopy [D ] string 7.下列二进制工具哪个是用来进行目标格式转换的() [A] nm[B] objdump [C ] objcopy [D ] string 8.下列二进制工具哪个是用来把程序地址转换为文件名和行号的() [A] nm[B] objdump [C ] objcopy [D ] addr2line 9.下列二进制工具哪个是用来将目标文件生成静态库的() [A] ar[B]nm [C ] objcopy [D ] objdump 10.FS2410开发板如果从nand flash启动,启动后()访问到nor flash;如果从nor flash 启动,启动后()访问nand flash。 [A] 可以[B] 不可以 11.SMDK2410开发平台上,linux要求bootloader将内核参数存储在什么位置() [A] 0x30008000 [B] 0x30000100 [C ] 0x30004000 [D ] 0x33f80000 12.SMDK2410开发平台上,linux要求bootloader将平台号保存在() [A] r0[B] r1 [C ] r2 [D ] r3 13.SMDK2410开发平台上,linux要求bootloader在运行内核前,让系统进入何种模式() [A] user[B] svc [C ] system 14.u-boot所支持的命令中,哪个是来设置环境变量的() [A] setenv [B] mm [C ] mtest [D ] bootm 15.u-boot支持的命令中,哪个是擦除nor flash的命令() [A] nand erase[B] protect [C ] erase [D ] cp 16.在内核配置时,哪个关键词是来包含下一级Kconfig( ) [A] menu endmenu[B] source [C ] choice endchoice [D ]depends on 17.内核启动过程中,如果终端出现”Error:a”错误,可能出现的原因是()

Linux-Ubuntu 下 Qt 4.7.1静态编译

Qt的静态编译是本文介绍的内容,相比较来说windows的Qt静态编译比较容易,相反对于linux编译网上的文章实践下来都有这样那样的错误,这里简要小结一下自己的编译成果。 一、实验环境 1Ubuntu 10.04 2qt-x11-opensource-4.7.1.tar.gz 二、前期准备 在安装好Ubuntu 10.04后默认是没有安装程序编译软件包的,所以我们首先是要配置ubuntu。 配置方法:(推荐全程root用户模式) 1、首先调整网络设置使得机器可以上网(具体做法因人而异,这边就忽略不计) 2、需要配置的安装包:输入命令: 3apt-get install build-essential libpcap0.8-dev libx11-dev libfreetype6-dev 4libavahi-gobject-dev libSM-dev libXrender-dev libfontconfig-dev libXext-dev 三、静态编译Qt 1、下载qt-x11-opensource-4.7.1.tar.gz 2、解压缩qt-x11-opensource-4.7.1.tar.gz 3、配置path 输入命令: 5export PATH="$PATH:/usr/local/Trolltech/Qt-4.7.1/bin" 4、进入qt解压目录,配置configure命令:./configure -static -nomake demos

-nomake examples -nomake tools -no-exceptions 5、分别输入“o”和“y”以后进入编译阶段 6make 7make install 慢慢等吧…… 四、静态编译Qt程序 1、建立文件夹,然后写程序文件XX.cpp 2、qmake -project 3、生成pro文件后在里面加入CONFIG += static 4、qmake 5、生成Makefile后在cxxflags的=后插入-static 6、make 小结:实现Ubuntu 下Qt4.7.1静态编译的内容介绍完了,希望本篇的静态编译读你有所帮助。 【编辑推荐】 8Qt中根据不同版本号使用不同源码 9解析Qt资源文件使用 10深度解析QT 介绍跨平台界面库 11Windows下Qt 静态编译连接 12浅谈Qt 静态编译 原文参考:https://www.sodocs.net/doc/c611773374.html,/symbian-270510.htm

嵌入式linux系统移植试题 - 答案

嵌入式Linux系统移植试题(时间:60分钟) 一、单项选择题(每题2分,共40分) 1.嵌入式linux系统移植不包括(D) [A] bootloader[B] linux内核[C] 根文件系统[D] 应用程序 2.下列选项中符合gcc的编译流程的是(A ) [A] 预处理->编译->汇编->连接[B] 预处理->汇编->编译->连接[C] 编译->预处 理->汇编->连接[D] 预处理->连接->汇编->编译 3.下列二进制工具哪个是丢弃目标文件的全部或者特定符号,减少文件体积的(D ) [A] size[B] as [C] nm [D] strip 4.下列二进制工具哪个是用来反汇编的(B) [A] nm[B] objdump [C] objcopy [D] string 5.下列二进制工具哪个是用来进行目标格式转换的(C ) [A] nm[B] objdump [C] objcopy [D] string 6.下列二进制工具哪个是用来把程序地址转换为文件名和行号的(D) [A] nm[B] objdump [C] objcopy [D] addr2line 7.FS4412开发平台上,uImage被解压到什么地址(B) [A] 0x40000000 [B] 0x40008000 [C] 0x41000000 [D] 0x43e00000 8.编译Linux内核设备树文件使用什么命令(D) [A] make dtbi[B] make tags [C] make dtb [D] make dtbs 9.linux要求bootloader在运行内核前,让系统进入何种模式(B) [A] user[B] svc [C] system 10.u-boot的命令中存放自启动命令的环境变量是(D) [A] ipaddr [B] bootargs [C] bootm [D] bootcmd 11.u-boot的命令中,设置环境变量的命令是(A) [A] setenv [B] printenv [C] tftp [D] bootm 12.u-boot中存放内核启动参数的环境变量是(C)

【IT专家】Qt程序发行Linux版,软件打包知识(patchelf 工具修改依赖库,确认 qmake

本文由我司收集整编,推荐下载,如有疑问,请与我司联系Qt程序发行Linux版,软件打包知识(patchelf 工具修改依赖库,确 认qmake 2017/06/02 449 patchelf 工具可以修改已编译运行程序的依赖库位置和指定库链接器 ?patchelf --set-rpath ?patchelf --set-interpreter ?通过这个工具https://github/probonopd/linuxdeployqt如果自己编译不了,也可以下载现成的 ?https://github/probonopd/linuxdeployqt/releases ?运行./linuxdeployqt-2-x86_64.AppImage ShanbayDict 并为成功,生成的lib目录下的so文件很少。 ?运行./linuxdeployqt-2-x86_64.AppImage ShanbayDict -appimage 也未成功,但lib 生成了很多so文件 ?使用patchelf --set-rpath /opt/Qt-5.7-static/lib/:./lib ShanbayDict 修改rpath后,ShanbayDict可以独立运行了,连同lib一起拷贝到新安装的Ubuntu 16.04系统中,也能运行了。 ?ldd ShanbayDict 显示,rpath已经指向./lib目录 ?patchelf可以通过sudo apt installpatchelf 安装 ?2017年2月24日 ?Qt 5.8编译的Qt程序 ?设置环境变量,确认qmake -v 是自己使用的Qt版本,如果不是,解决办法是: ?export PATH=/home/lieefu/Qt5.8.0/5.8/gcc_64/bin:$PATH ?创建qml目录,把/home/lieefu/Qt5.8.0/5.8/gcc_64/qml 目录下用到的模块复制过来,我的app用到了三个QtQuick、QtQuick.2、QtMultimedia。 ?增加plugin中platforminputcontexts 包括libfcitxplatforminputcontextplugin.so文

linux课后习题答案教材课后习题参考答案

第 1 章Linux 概况 一、选择题 1、下列哪个选项不是Linux 支持的? A. 多用户 B. 超进程 C. 可移植 D. 多进程 2、Linux 是所谓的“Free Software”,这个“Free”的含义是什么? A. Linux 不需要付费 B. Linux 发行商不能向用户收费 C. Linux 可自由修改和发布 D.只有Linux 的作者才能向用户收费 3、以下关于Linux 内核版本的说法,错误的是? A. 依次表示为主版本号.次版本号.修正次数的形式 B. 1.2.2 表示稳定的发行版 C. 2.2.6 表示对内核2.2 的第6 次修正 D. 1.3.2 表示稳定的发行版 4、以下哪个软件不是Linux 发行版本? A. 红旗 Server 4 B. Solaris 10 C. RedHat 9 D. Fedora 8 5、与Windows 相比Linux 在哪个方面相对应用得较少? A. 桌面 B. 嵌入式系统 C. 服务器 D. 集群 A6、Linux 系统各组成部分中哪一项是基础? A.内核 B. X Window C. Shell D. Gnome B7、Linux 内核管理不包括的子系统是哪个? A. 进程管理系统 B. 内存管理系统 C. 文件管理系统 D. 硬件管理系统 A8、下面关于Shell 的说法,不正确的是哪个? A. 操作系统的外壳 B. 用户与Linux 内核之间的接口 C. 一种和C 类似的高级程序设计语言 D. 一个命令语言解释器 B9、以下哪种Shell 类型在Linux 环境下不能使用? A.B Shell B.K Shel C.R Shell D.Bash 10、在Linux 中把声卡当作何种设备? A. 字符设备 B. 输出设备 C. 块设备 D. 网络设备 二、填空题 1、Linux 采用 LRU 算法(最近最少使用)算法,淘汰最近没有访问的

linux及C试题(含答案)

华清远见嵌入式学院《Linux及C》考试题(B卷) 一、选择题(23题,每空2分,共46分) 1.在使用mkdir命令创建新的目录时,在其父目录不存在时先创建父目录的选项(D )。 A.-m B.-d C.-f D.-p 2.任何时候用户需要回到用户主目录时可以使用命令 ( A ) 。 A. cd B. pwd C. path D. cd . 3.将当前目录下的文件shell.sh移动到目录/home/linux下的命令为( B ) 。 A. cp shell.sh /home/linux B. mv shell.sh /home/linux C. ls shell.sh / home/linux/she ll.sh D. mv /root/shell.sh /home/linux/shell.sh 4.下面( C )命令不能用来显示文件的内容。 [A] more [B] less [C] find [D] cat 5./etc/shadow文件中存放( B )。 A.用户账号基本信息 B.用户口令的加密信息 C.用户组信息 D.文件系统信息 6.LINUX所有服务的启动脚本都存放在( B )目录中。 A./etc/rc.d/init.d B./etc/init.d C./etc/rc.d/rc D./etc/rc.d 7.若要将当前目录中的myfile.txt文件压缩成myfile.txt.tar.gz,则实现的命令为(C )。 A.tar -cvf myfile.txt myfile.txt.tar.gz B.tar -zcvf myfile.txt myfile.txt.tar.gz C.tar -zcvf myfile.txt.tar.gz myfile.txt D.tar -cvf myfile.txt.tar.gz myfile.txt 8.以下程序的运行结果为( C ) #include #include int SubCount(char *dest, int count) { strcpy(dest,"555"); count++; return 0; } int main() { int count = 3; char caBuf[8]; SubCount(caBuf,count); printf("%d\n",count);

【IT专家】《Linux与Qt程序设计》知识框架

本文由我司收集整编,推荐下载,如有疑问,请与我司联系 《Linux与Qt程序设计》知识框架 本文主要是通过一本书来大致了解Qt开发的框架,不对具体内容做详细分析。?1.首先弄清楚概念:定义- 以自己的话理解是什么- 实现的是什么功能- 用在哪些地方 ?2.前面认识到的知识点的特点- 代码实现- 工程代码分析 ?第一部分Linux基础知识第二部分Qt程序基础第5章OtCreator下载与安装5.1 QtCreator下载5.1.1 使用软件中心下载QtCreator5.1.2 访问Qt网站下载相关资源5.2 第一个Qt程序5.3 QtCreator介绍5.3.1 QtCreator界面介绍5.3.2 编译、调试、发布设置5.4 QtDesigner介绍第6章Qt基础6.1 Qt概述与特性6.1.1 Qt简介6.1.2 Qt特性 ?Qt SDK包括:Qt库、Qt Creator IDE、Qt工具:Qt Designer、Qt Linguist(消除国际化流程障碍)、Qt Assistant. ?6.2 Qt与Xll的关系6.2.1 什么是X116.2.2 Qt与Xl16.3 Qt与KDE的关系6.3.1 KDE简介6.3.2 Qt与KDE6.4 Qt库和组件 ?Qt SDK中主要包括类库、开发工具、平台相关支持、授权许可等。 ?其中类库包含了Qt的所有对外发布的功能组件: ?1)Core: Qt4的基本模块,定义了其他模块使用的Qt核心的非GUI类,所有其他模块都依赖于该模块。 ?2)GUI: 定义了图形用户界面类 ?3)WebKit:提供了一个在Qt中使用Web Browser的渲染与解析引擎。 ?4)Graphic View:提供的是一种Qt Model-View编程模式,既可以管理大数量的定制2D graphical items,又可以与它们交互,由于一个视图窗口可以把这些项绘制出来,并支持旋转与缩放。 ?5)Scripting:提供了对脚本(如:Java、Python、Perl、Ruby)的支持。 ?6)OpenGL ?7)XML: 定义了处理XML(eXtensible Markup Language)语言的类。

Linux系统移植步骤

Linux系统移植步骤 Linux系统移植步骤 arm9 S3C2410微处理器与Linux的结合越来越紧密,逐渐在嵌入式领域得到广范的应用。目前,在便携式消费类电子产品、无线设备、汽车、网络、存储产品等都可以看到S3C2410与Linux相结合的身影。 S3C2410微处理器是一款由Samsung公司为手持终端设计的低价格、低功耗、高性能,基于arm920T核的微处理器。它带有内存管理单元(MMU),采用0.18mm工艺和AMBA新型总线结构,主频可达203MHz。同时,它支持Thumb 16位压缩指令集,从而能以较小的存储空间获得32位的系统性能。 在众多嵌入式操作系统中,Linux目前发展最快、应用最为广泛[1]。性能优良、源码开放的Linux具有体积小、内核可裁减、网络功能完善、可移植性强等诸多优点,非常适合作为嵌入式操作系统。一个最基本的Linux操作系统应该包括:引导程序、内核与根文件系统三部分。 与Linux2.4内核相比,2.6内核吸收了最新的技术,在性能、可测量性、器件支持和可用性方面有了大幅度提高;支持更多的体系结构、处理器、总线、接口和设备;标准化了内部接口;简化了扩展或添加新设备的步骤等。 本文着重介绍如何制作一个基于linux-2.6.19内核的小型Linux操作系统,并将它移植到S3C2410开放板上。内容包括交叉编译环境的

建立,引导程序、2.6.19内核、根文件系统的修改、配置、编译、移植等。 系统的制作移植 建立交叉编译环境 要移植、开发小型Linux系统,首先要在安装了RedHat9或更高版本Linux操作系统的主机上配置交叉开发环境。交叉开发是指在开发主机上安装开发工具,编辑、编译目标板的引导程序、内核和文件系统,使其能在目标板上运行。 针对本次开发,需要安装arm-linux-gcc-3.4.1以及armv4l-tools工具链。在安装完毕后,切记要将两者的路径分别添加到系统路径$PATH 中。 引导程序 对于计算机系统来说,从开机上电到操作系统启动需要一个引导程序。嵌入式linux系统同样离不开引导程序,这个引导程序叫做Bootloader[1]。通过这段小程序,可以初始化硬件设备、建立内存空间的映射表,从而建立适当的系统硬件环境,为最终调用操作系统内核做好准备。 vivi[4]是韩国MIZI公司为其arm9系列产品而研发的Bootloader,小而灵巧,这里选用它作为小型Linux系统的Bootloader。 首先要修改vivi源代码中的Flash分区信息,新的分区信息如表1所示。 根据表1,在vivi源码arch/s3c2410/smdk.c文件中作出相应的修

Linux 基础试题

Linux 基础题库 一.单项选择题 1.下列厂商和操作系统相对应正确的是( B ) A.Digital - MVS B.Sun – Solaris C.IBM – VMS D.HP - VMS 2.Linux系统的1.0版内核的发布是在( C ) A.1992年 B.1993年 C.1994年 D.1995年 3.完全安装Red Hat Linux 8.0需要的磁盘空间是( D ) A.1.8GB B.2.3GB C.400MB D.4.5GB 4.Linux系统是一个( D )的操作系统 A.单用户、单任务 B.单用户、多任务 C.多用户、单任务 D.多用户、多任务5.在安装开始前,用光盘启动系统,想要进入字符界面安装,需要输入的命令是( C )A.linux doc B.linux C.linux text D.linux note 6.Red Hat Linux系统中用户默认的Shell是( A ) A.bash B.ksh C.csh D.sh 7.在Linux系统中,管道的符号是( C ) A.> B.< C.| D.: 8.Linux的文件名的长度限制在( D )字符以内 A.11 B.128 C.256 D.255 9.如果忘记了ls命令的用法,可以采用( C )命令获得帮助 A.?ls B.help ls C.man ls D.get ls 10.在vi编辑器的命令模式中,在光标所在位置的右侧插入字符的命令是( A) A.a B.A C.i D.I 11.在vi编辑器的命令模式中,删除一行的命令是( B ) A.yy B.dd C.pp D.xx 12.以下输出重定向命令中,覆盖存在文件的是( B ) A.>> B.> C.< D.<< 13.在GRUB的配置文件grub.conf中,“timeout=-1”的含义是( C ) A.不等待用户选择,直接启动默认的系统 C.一直等待用户选择要启动的系统 B.在10秒钟内,等待用户选择要启动的系统 D.无效 14.系统中文件系统的挂载配置文件是( A ) A./etc/fstab B./usr/fstab C./etc/mount D./usr/mount 15.在挂载文件系统的时候,如果想要以只读的方式挂载,需要的参数是( A ) A.-o ro B.-o rw C.-a ro D.-a rw 16.要给文件file1加上其他人可执行属性的命令是( C ) A.chmod a+x B.chown a+x C.chmod o+x D.chown o+x 17.添加用户“user”的命令是( B ) https://www.sodocs.net/doc/c611773374.html,er user https://www.sodocs.net/doc/c611773374.html,eradd user C.add user D.adduser 18.删除用户“user”及其主目录下所有文件的命令是( B ) https://www.sodocs.net/doc/c611773374.html,erdel –p user https://www.sodocs.net/doc/c611773374.html,erdel –r user https://www.sodocs.net/doc/c611773374.html,erdel –a user https://www.sodocs.net/doc/c611773374.html,erdel –z user 19.查看系统当中所有进程的命令是( D ) A.ps all B.ps aix C.ps auf D.ps aux 20.显示系统启动时间的命令是( B )

QT程序,如何在ARM板上运行

QT程序,如何在ARM板上运行写这篇文章,主要是为了说明怎么让PC机下编译好的QT程序移植到板子上运行。在说明之前,我们要了解一个事情,就是QT。QT是一个跨平台的开发工具,具有很好的移植性,它所依赖的库文件在PC机上和在ARM上是不一样的,那么我要怎么做呢? 很简单,就是重新编译已经写好的QT程序。为什么需要重新编译,第一,ARM的CPU的指令集和PC的CPU指令集肯定是不一样的,也就是需要交叉编译。第二:由于QT所依赖的库文件不一样,在不同的指令集得CPU里,库是需要移植的。我这里假设ARM板的文件系统里已经移植好了QT相关的库文件(具体怎么移植,我会再写一篇文章),移植好后,在开发板上就可以移植QT程序了。 那么,具体我要怎么编译呢?我们都知道,编译好的QT的程序,一般会有几个.CPP\.h文件,这么多的文件我们要怎么样编译。首先,我们需要安装QT版本的库,一定要注意,这个库文件一定和开发板上的是同一个库。我们假设这个库名字叫qtembed450-arm。以下步骤一定要注意: 1.安装目录一定要在“/usr/local/”下; 2.安装成功后,这步非常关键,一定要设置环境变量,而且,我们要设置三个环境变量,这样做有三个目的:①可以在任何路径下用库里的命令②编译时候可以指定编译规则为 arm-linux-g++③编译时候可以指定到所需要的库文件。那么安装后,输入一下命令:gedit /root/.bashrc.这个命令执行后就进入到设置环境变量的地方,我们要加入以下三个环境变量的设置: export PATH=$PATH:/usr/local/qtembed450-arm/bin export LD_LIBRARY_PATH=$LD_LTBRARY_PATH:/usr/local/qtembed450-arm/lib export QMAKESPEC=/usr/local/qtembed450-arm/mkspecs/default 以上设置非常的重要,非常的关键。呵呵,先照着设置,具体原因我会细谈。注意,我编译用的很重要的qmake-arm 命令,就在/usr/local/qtembed450-arm/bin下,可以打开看看哦!环境变量设置好后,用which qmake-arm 命令来确认下是否成功,呵呵。 3.准备工作做到这里,算是进行一半了,哎,真累啊!还要接着写呢。接下来我们要把我们的编译好的QT程序的文件夹打开,把里面的 .CPP/.h文件拷贝出来,新建立一个文件夹; 4.把以上的文件里的.cpp .h文件复制后新建立一个文件夹。 5.新文件夹建立后,在linux终端中进入到该文件夹所在目录下,执行这个命令:qmake-arm -project命令,千万注意,-project 和arm之间一定要有空格啊!该命令执行后,会生成一个.pro文件,紧接着呢,执行qmake-arm命令,该命令执行后呢,会生成一个Makefile文件,这步很关键哦,没有这步就不会有Makefile文件,一般在这步会出现很多错误,就是库没有发现之类,这个时候,一定要检查前面的步骤,仔细检查看是否是错误。我们这个时候打开Makefile文件看一下,会发现,里面的编译已经变成 arm-linux-g++。这个时候,就踏实,接下来怎么办?还用问吗,直接make下就好了,哈哈,简单吧!看到上面的qtmyjpg文件了吗?这个是可以在开发板上运行的哦!接下来

相关主题