﻿<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>七维森林七维森林 |  &#187; Linux</title>
	<atom:link href="http://lizehong.freevar.com/?feed=rss2&#038;tag=linux" rel="self" type="application/rss+xml" />
	<link>http://lizehong.freevar.com</link>
	<description>技术爆炸、文明生存与个体价值</description>
	<lastBuildDate>Sat, 08 Dec 2012 14:07:20 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4</generator>
		<item>
		<title>Linux开机程序自启动实现</title>
		<link>http://lizehong.freevar.com/?p=186</link>
		<comments>http://lizehong.freevar.com/?p=186#comments</comments>
		<pubDate>Thu, 19 Apr 2012 13:53:03 +0000</pubDate>
		<dc:creator>Lee</dc:creator>
				<category><![CDATA[Linux开发]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://lizehong.freevar.com/?p=186</guid>
		<description><![CDATA[1.使程序在登录之前自动启动 把相应的启动脚本或者程序启动命令加入到inittab或者/etc/rc.local脚本中 注意此时还没有加载profile配置，无法使用登录后的环境变量 2.使程序在登录后自动启动 所有用户登录都自动启动：把脚本或程序放到/etc/profile脚本 … <a href="http://lizehong.freevar.com/?p=186"> Continue reading <span class="meta-nav">&#8594; </span></a>]]></description>
			<content:encoded><![CDATA[<p>1.使程序在登录之前自动启动<br />
把相应的启动脚本或者程序启动命令加入到inittab或者/etc/rc.local脚本中<br />
注意此时还没有加载profile配置，无法使用登录后的环境变量</p>
<p>2.使程序在登录后自动启动<br />
所有用户登录都自动启动：把脚本或程序放到/etc/profile脚本文件中<br />
特定用户登录自动启动：把脚本或程序放到用户home目录下的相应配置文件中，如：.bash_profile/.bash_login/.profile</p>
<p>3.使程序在登出时自动运行<br />
把脚本或程序放到用户home目录下的.bash_logout文件中</p>
]]></content:encoded>
			<wfw:commentRss>http://lizehong.freevar.com/?feed=rss2&#038;p=186</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux启动过程及相关配置文件</title>
		<link>http://lizehong.freevar.com/?p=183</link>
		<comments>http://lizehong.freevar.com/?p=183#comments</comments>
		<pubDate>Thu, 19 Apr 2012 13:47:14 +0000</pubDate>
		<dc:creator>Lee</dc:creator>
				<category><![CDATA[Linux开发]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://lizehong.freevar.com/?p=183</guid>
		<description><![CDATA[Linux的不行发行版之间使用的文件系统不一致，因此导致了Linux启动过程所涉及的一些相关配置文件也各不相同，容易导致混乱。主要是体现在Linux的init进程启动的过程： Red Hat下相关的配置文件为： /etc/inittab /etc/rc.d/rc.sysinit  … <a href="http://lizehong.freevar.com/?p=183"> Continue reading <span class="meta-nav">&#8594; </span></a>]]></description>
			<content:encoded><![CDATA[<p>Linux的不行发行版之间使用的文件系统不一致，因此导致了Linux启动过程所涉及的一些相关配置文件也各不相同，容易导致混乱。主要是体现在Linux的init进程启动的过程：<br />
Red Hat下相关的配置文件为：</p>
<p style="padding-left: 30px;">/etc/inittab<br />
/etc/rc.d/rc.sysinit<br />
/etc/rc.d/rcX.d/ 目录下的各符号链接<br />
/etc/rc.d/init.d/ 目录下的实际守护进程脚本<br />
/etc/rc.d/rc.local 用户自定义启动脚本</p>
<p>Ubuntu下相关的配置文件对应为：</p>
<p style="padding-left: 30px;">/etc/inittab （有的好像没有这个文件）<br />
/etc/rcS.d/ 目录下的启动服务符号链接<br />
/etc/rcX.d/ 各运行等级对应的启动目录,X:0-6<br />
/etc/init.d/ 实际的服务启动脚本<br />
/etc/rc.local 用户自定义启动脚本</p>
<p>下面主要就Ubuntu系统下的配置文件之间的关联进行一个整理：</p>
<ol>
<li>init进程读取inittab文件，启动rcS.d目录下的所有服务，确定启动运行级别(initdefault),依据顺序停止[K]或启动[S]对应运行级别rcX.d/目录下的服务</li>
<li>rcS.d/rcX.d目录下的文件均为init.d目录下的服务脚本的符号链接，通过标识[K]标明停止，标识[S]标明启动.</li>
<li>三个文件：/etc/init.d/rc  /etc/init.d/rc.local  /etc/init.d/rcS</li>
</ol>
<ul>
</ul>
<ul>
<li>rc脚本通过第一个参数确定具体的服务运行目录/级别,如rc S 执行rcS.d/下的服务，rc 5 执行rc5.d/下的服务等。</li>
<li>rc.local脚本根据标识执行或停止/etc/rc.local脚本(如果存在)，默认/etc/rc.local文件中没有任何内容，或者有一句 exit 0；可以在其中添加自定义的启动程序。</li>
<li>rcS脚本执行rcS.d/下的所有服务：exec /etc/init.d/rc S</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://lizehong.freevar.com/?feed=rss2&#038;p=183</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Qt/Embedded for Linux应用开发</title>
		<link>http://lizehong.freevar.com/?p=188</link>
		<comments>http://lizehong.freevar.com/?p=188#comments</comments>
		<pubDate>Wed, 18 Apr 2012 13:56:35 +0000</pubDate>
		<dc:creator>Lee</dc:creator>
				<category><![CDATA[Qt应用]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[QTE]]></category>

		<guid isPermaLink="false">http://lizehong.freevar.com/?p=188</guid>
		<description><![CDATA[一、开发环境的构建 1.下载Qt源代码，包括桌面版和嵌入式版 如4.7.4版：qt-everywhere-opensource-src-4.7.4.tar.gz qt-everywhere-opensource-src-4.7.4[embedded].tar.gz 解压缩到当前目 … <a href="http://lizehong.freevar.com/?p=188"> Continue reading <span class="meta-nav">&#8594; </span></a>]]></description>
			<content:encoded><![CDATA[<p>一、开发环境的构建<br />
1.下载Qt源代码，包括桌面版和嵌入式版<br />
如4.7.4版：qt-everywhere-opensource-src-4.7.4.tar.gz<br />
qt-everywhere-opensource-src-4.7.4[embedded].tar.gz<br />
解压缩到当前目录：</p>
<pre class="brush: bash; gutter: false">tar -xzvf qt-everywhere-opensource-src-4.7.4.tar.gz</pre>
<p>2.编译安装桌面版和嵌入式版<br />
桌面版一般为默认配置安装：</p>
<pre class="brush: bash; gutter: false">./configure ; sudo make; sudo make install;</pre>
<p>嵌入式版安装作为开发用，也一般可以为默认安装，但必须指定目标类型与主机类型<br />
(1) 首先需要指定目标类型，利用现有的或者修改、添加目标类型<br />
a.进入mkspecs/qws/文件夹中：cd mkspecs/qws<br />
b.找到你的目标类型文件夹并且拷贝一份：cp linux-arm-g++ linux-omapl138-g++ -a<br />
c.进入你的目标文件夹中以修改qmake.conf配置文件，主要是修改交叉编译器：</p>
<pre class="brush: bash; gutter: false">cd linux-omapl138-g++; gedit qmake.conf</pre>
<p>修改文件中的如下内容以符合你的交叉开发环境：<br />
<code># modifications to g++.conf<br />
QMAKE_CC = arm-none-linux-gnueabi-gcc<br />
QMAKE_CXX = arm-none-linux-gnueabi-g++<br />
QMAKE_LINK = arm-none-linux-gnueabi-g++<br />
QMAKE_LINK_SHLIB = arm-none-linux-gnueabi-<br />
# modifications to linux.conf<br />
QMAKE_AR = arm-none-linux-gnueabi-ar cqs<br />
QMAKE_OBJCOPY = arm-none-linux-gnueabi-objcopy<br />
QMAKE_STRIP = arm-none-linux-gnueabi-strip</code><br />
保存修改，完成目标配置文件的添加，回到qt主目录.<br />
(2)执行configure进行安装前的配置，它会自动执行qt的qmake，读取各工程依据配置选项生成makefile文件<br />
<code>(echo o ; echo yes ) | ./configure \<br />
-prefix /home/realtimedsp/703-project/tools/qte-4.7.4-703 \ (指定安装目录)<br />
-embedded arm -platform /qws/linux-x86-g++ -xplatform /qws/linux-omapl138-g++ \ （指定目标）<br />
-depths 16,24,32 (指定颜色深度)</code><br />
(3)配置结束后，就是编译安装了,注意安装位置的读写权限，否则会失败</p>
<pre class="brush: bash; gutter: false">make; make install</pre>
<p>二、应用设计及编码<br />
推荐使用Qt提供的QtCreator IDE进行编码开发，在Qt的官网上可以直接下载到二进制的bin文件，直接安装就好了</p>
<pre class="brush: bash; gutter: false">./qt-creator-linux-x86-opensource-2.4.1.bin</pre>
<p>因为它与Qt的库进行了完美的集成：从编码到调试，从项目管理到帮助文档，以及跨平台开发，可以极大地提高Qt<br />
应用开发的效率。</p>
<p>编码完成后先在主机上进行调试，保证可以正确地实现所有的功能后，再移植到目标平台上进行调试、测试，这一<br />
步在QtCreator上可以很轻松地完成。</p>
<p>三、QTE应用的开发板测试<br />
(1)首先需要在开发板上安装QTE的动态库，这样QTE应用才能正确地运行起来<br />
a.从之前安装的嵌入式QT版本文件夹中拷贝库目录：lib/ 目录到开发板使用的文件系统中，建议存放位置：<br />
/opt/QTE/<br />
b.配置环境变量，以使应用程序找到QTE的动态库文件：<br />
(可以把下面的配置写到profile文件中，也可以写成一个脚本)<br />
<code>export QTEDIR=/opt/QTE/<br />
export LD_LIBRARY_PATH=$QTEDIR/lib:$LD_LIBRARY_PATH<br />
export QWS_SIZE=640x480</code><br />
c.然后把交叉编译好的QTE应用下到开发板的文件系统上，并且通过超级终端之类的方式在开发板上运行应用</p>
<pre class="brush: bash; gutter: false">./EST703 -qws</pre>
<p>(必须加上-qws选项，以指定应用自身作为QTE的Server进行图形界面的绘制与管理)</p>
<p>四、QTE库的自定义配置（QTE库的裁减）<br />
通过指定应用使用了的特性，裁减掉不需要的特性来自定义QTE，从而降低QTE动态库的大小，降低资源的消耗。<br />
当应用的功能测试及调试已经基本完成以后，就可以开始进行应用的性能的测试与调试了。<br />
性能的测试与优化主要可以从两个方面入手：<br />
1.QTE的动态库的裁减优化<br />
2.应用自身的代码重构优化<br />
这里主要说明一下QTE库的裁减配置：<br />
(1).配置工作主要是在执行./configure这一步骤上，通过指定相应的选项与配置文件来生成自定义的makefile<br />
文件，之后的编译与安装步骤和前面一样：make；make install;<br />
(2).configure命令有很多的选项，大部分的选项可以从字面理解其作用与含义，可以通过./configure &#8211;help<br />
命令查看所有的选项及其说明。在不是完全熟悉的情况下，建议把其导出到文件以方便随时查看：</p>
<pre class="brush: bash; gutter: false">./configure --help &gt; qteconf_help.txt</pre>
<p>(3).配置工作主要是裁减掉不需要的特性，也就是指定 -no-* 形式的选项，这需要根据具体的项目应用进行具体<br />
的配置，当然必须对各选项的特性是什么了解清楚。（多查看选项帮助中的说明）<br />
(4).configure的选项配置示例（703A）：<br />
<code> (echo o ; echo yes ) | ./configure \<br />
-prefix /home/realtimedsp/703-project/tools/qte-4.7.4-703 \<br />
-embedded arm -platform /qws/linux-x86-g++ -xplatform /qws/linux-omapl138-g++ \<br />
-depths 16,24,32 \<br />
-no-largefile \<br />
-release \<br />
-fast \<br />
-no-dbus \<br />
-no-sql-sqlite \<br />
-qt-libpng \<br />
-qt-freetype \<br />
-little-endian -host-little-endian \<br />
-no-svg \<br />
-no-qt3support \<br />
-no-libtiff -no-libmng \<br />
-no-mmx -no-sse -no-sse2 -no-sse3 \<br />
-no-3dnow \<br />
-no-openssl \<br />
-no-phonon \<br />
-no-opengl \<br />
-no-cups \<br />
-no-qvfb \<br />
-no-gif \<br />
-no-webkit \<br />
-no-javascript-jit \<br />
-no-script \<br />
-no-xmlpatterns \<br />
-no-kbd-tty -no-kbd-linuxinput -no-kbd-qvfb -no-kbd-qnx \<br />
-no-mouse-tslib -no-mouse-pc -no-mouse-linuxtp -no-mouse-linuxinput \<br />
-no-mouse-tslib -no-mouse-qvfb -no-mouse-qnx \<br />
-no-xcursor -no-xfixes -no-xrandr -no-xrender \<br />
-nomake examples -nomake tools -nomake docs -nomake demos</code><br />
(5).配置选项是从一个比较大的粒度去裁减QTE库的功能特性，如果需要从一个更小更细的粒度去定制QTE库，那就<br />
需要编辑qconfig-xxx.h配置文件，通过定义各种特性宏(features)来裁减QTE库了。<br />
a.首先找到并进入相应的文件所在目录，主要是：qconfig-xxx.h类文件以及features.txt文件<br />
cd src/corelib/global/<br />
&gt;&gt;features.txt文件对可以进行配置的所有特性进行了一个简单的说明，在进行配置时，随时查看该文件是个良好的<br />
习惯，尤其要注意的是文件中每个特性的 Requires: 字段，它指定了该特性对其它特性的依赖关系，一旦你的配<br />
置没有满足这个依赖关系，那么你将可能无法编译成功QTE库，或者编译成功但是无法运行应用。<br />
&gt;&gt;Qt默认提供了5个qconfig-xxx.h的配置文件，从裁减特性多到少排序依次为：<br />
qconfig-minimal.h qconfig-small.h qconfig-medium.h qconfig-large.h qconfig-dist.h<br />
通过查看这些文件可以发现，其只是进行一个宏的定义，难度在于清楚哪些特性是需要的，哪些可以#define掉。<br />
b.新建一个工程自己的配置文件，如：qconfig-703.h，从上面五个配置文件中拷贝一下内容到该文件，如从<br />
qconfig-minimal.h拷贝，然后配置特性：<br />
&gt;&gt;取消对应的宏定义，如果应用需要该特性;<br />
&gt;&gt;增加对应的宏定义，如果应用不需要某个特性.<br />
如703A中显示不需要鼠标指针，所以需要如下的宏定义：<br />
<code>#ifndef QT_NO_QWS_ALPHA_CURSOR<br />
# define QT_NO_QWS_ALPHA_CURSOR<br />
#endif<br />
#ifndef QT_NO_QWS_CURSOR<br />
# define QT_NO_QWS_CURSOR<br />
#endif</code><br />
c.编辑好qconfig-703.h配置文件后，把它添加到./configure配置选项的后面,即在上面的选项最后添加:<br />
-qconfig 703<br />
然后就可以开始配置、编译与安装了.<br />
(6).安装成功后，就可以使用其进行应用的构建与开发板运行了。记得要用该版本的lib/替换掉开发板上<br />
之前的lib/。<br />
如果构建出错或者运行出错，那应该是配置出问题了，需要返回到上面的配置步骤进行检查与修改。</p>
<p>五、QTE应用中文显示<br />
在开发板上实现应用的中文显示是一个稍微麻烦的事情，因为嵌入式os一般缺乏必要的中文字体库与相应的编码<br />
识别。因此解决中文显示主要是两个工作：<br />
1.确定QTE应用代码中中文编辑使用的编码是什么，也就是你的代码编辑环境中字符编码是什么。QtCreator平台中<br />
默认的字符编码是UTF-8.<br />
&gt;&gt;然后在main.cpp中指定对应的编码解释：(记得对中文字符串使用tr()函数)</p>
<pre class="brush: cpp; gutter: true; first-line: 1; highlight: []; html-script: false">QTextCodec::setCodecForTr(QTextCodec::codecForName(&quot;UTF-8&quot;));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName(&quot;UTF-8&quot;));</pre>
<p>2.确定开发板的文件系统上是否有中文字体库(一般是没有的),在开发板的Qt库目录下添加中文字体库，即前面的：<br />
/opt/QTE/lib/fonts目录下。<br />
linux平台上的中文字体库不多，比较常用的是文泉驿字体，可以从网上下载，它是开源的。我下载使用的是：<br />
wqy-zenhei-0.9.45.tar.gz<br />
解压缩，把里面的wqy-zenhei.ttc字体库文件拷贝到上面的fonts目录里面就可以了。<br />
通过这两个步骤就可以实现中文的显示了。</p>
<p>(1.网上说ttf字体文件也是可以的，可是我从windows的字体文件夹中拷贝一个测试了一下，无法显示中文；<br />
2.网上很多提到qpf文件是最佳中文字体显示选择，Qt默认提供了unifont_160_50.qpf中文字体文件，可是我测试<br />
了多次都无法显示中文，而且我从网上下的wenquanyi的几个qpf文件经测试也无法显示中文，不知道什么原因)</p>
<p>六、Qt中各种工具的使用：qvfp与makeqpf<br />
Qt的主目录下有一个tools文件夹，里面提供了一些有用的工具的源代码，可以通过安装好的桌面Qt开发环境编译<br />
生成这些工具的二进制程序。源代码中有.pro项目文件，可以直接打开、构建，构建好后，把对应的二进制程序<br />
拷贝到Qt安装目录下的bin/文件夹下，这样就可以直接在终端执行这些工具了。<br />
qvfp与makeqpf是tools里面的两个工具：<br />
qvfp————提供虚拟帧缓存的实现与管理，从而使得移动Qt应用可以在桌面环境中进行仿真式的测试。<br />
makeqpf————qpf字体文件的生成工具，可以转换ttf字体文件为qpf2格式的Qt自带的字体文件格式。<br />
(1).qvfp的使用<br />
a.首先运行qvfp工具,指定相应的选项：<br />
<code>Usage: qvfb [-width width] [-height height] [-depth depth] [-zoom zoom][-mmap] [-nocursor]<br />
[-qwsdisplay :id] [-x11display :id] [-skin skindirectory]<br />
Supported depths: 1, 4, 8, 12, 15, 16, 18, 24, 32</code><br />
示例：qvfp -width 640 -height 480 -depth 16,24,32 -nocursor<br />
b.然后运行你的嵌入式Qt应用程序，运行方式和在开发板上一样，即需要加上 -qws 选项，这样应用才能使用qvfp<br />
提供的虚拟帧缓存。(使用下面安装的x86目标库构建你的Qt应用)<br />
&gt;&gt;这里的应用程序必须是使用嵌入式的Qt库构建的，但是要使应用能在桌面(x86)环境上运行，就必须是x86目标，<br />
因此这里必须编译安装一个x86目标的嵌入式Qt库。过程和前面的arm目标库安装是基本一致的。配置如下：<br />
<code>(echo o ; echo yes ) | ./configure \<br />
-prefix /home/realtimedsp/703-project/tools/qte-4.7.4-x86 \<br />
-embedded x86 \<br />
-depths 16,24,32 \<br />
-qt-gfx-qvfb \<br />
-no-gif \<br />
-no-webkit \<br />
-no-javascript-jit \<br />
-no-script \<br />
-no-xmlpatterns \<br />
-qt-kbd-qvfb \<br />
-qt-mouse-qvfb \<br />
-nomake examples -nomake tools -nomake docs -nomake demos</code><br />
因为要使用qvfp进行测试，所以配置选项中的：-qt-gfx-qvfb -qt-kbd-qvfb -qt-mouse-qvfb是必须的。<br />
(2).makeqpf的使用<br />
a.运行makeqpf工具，不用输选项，然后出现图形界面，选择想要转换的字体,指定字体大小、权重、是否斜体，<br />
进行转换就好了<br />
b.界面的第二部分是各种字符集，可以参考word中的插入-&gt;符号界面中的子集下拉表。</p>
]]></content:encoded>
			<wfw:commentRss>http://lizehong.freevar.com/?feed=rss2&#038;p=188</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
