<?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; 环境配置</title>
	<atom:link href="http://www.adamjiang.com/archives/tag/%e7%8e%af%e5%a2%83%e9%85%8d%e7%bd%ae/feed" rel="self" type="application/rss+xml" />
	<link>http://www.adamjiang.com</link>
	<description>长脑袋的个人博客</description>
	<lastBuildDate>Tue, 15 May 2012 16:53:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>以Funtoo为基础的Linux桌面系统（2）</title>
		<link>http://www.adamjiang.com/archives/1154</link>
		<comments>http://www.adamjiang.com/archives/1154#comments</comments>
		<pubDate>Tue, 15 May 2012 16:53:14 +0000</pubDate>
		<dc:creator>jcadam</dc:creator>
				<category><![CDATA[Linux tips]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[源代码]]></category>
		<category><![CDATA[环境配置]]></category>
		<category><![CDATA[自由]]></category>

		<guid isPermaLink="false">http://www.adamjiang.com/?p=1154</guid>
		<description><![CDATA[构建自己的Linux桌面系统的第一步，就是根据Funtoo网站上提供的wiki页面，编译，安装和配置基础系统（base system）。这包括 制作一个SysRescureCD的live USB。&#187;详情 通过SysRescureCD提供的工具初始化硬盘，并且在硬盘上安装stage3——也就是最基础的根文件系统。 配置这个最基础的系统。 利用该文件系统提供的基础工具编译安装Linux内核。 安装grub2作为bootloader。 如果你对类Unix系统的基本概念非常了解，这个过程看上去应该是水到渠成的。安装的细节虽然无需多言，Funtoo提供的指南已经十分详尽，但这里却有一些非常有趣的概念值得讨论。 第一，这个安装过程的全部魔法都在chroot命令上。我一直以为这个命令是类Unix操作系统设计的精华之一。为什么这么说呢？众所周知，Linux操作系统对它的跟文件系统有一个必要的假设。即，根文件系统是一棵树。而这个树的根就是“/”。像硬盘，SSD之类的块设备可以通过“挂载”（mount）的方式，将实体的存储设备挂载到这棵逻辑中存在的树的任意节点上。当系统在这棵树上创建新文件或者修改任何既有内容时，这种变更就会被反映到实际的存储设备上。树结构的妙处在于，任意一棵子树和拥有该子树的“大树”总是相似的。当你将准备好的硬盘分区挂载到这棵树上，并且chroot进入这个树的子树，你就的到了一个全新的“根文件系统”。但于此同时，系统运行的却是原来大树中预装的Linux内核，由此来帮助新文件系统的生成。这种方法在Windows系统中听起来有点像天方夜谭但是在Linux系统中，却是司空见惯。采用这种方法可也在多个不同的根文件系统之间无缝的切换，比如，你可以在一个64位系统的根文件系统的某一棵子树上创建一个32位系统子树。这对于很多系统测试和环境搭建都不无裨益。一个典型的例子就是debian系统采用chroot的方式帮助开发者创建一个便于创建软件包的标准环境，由此，.deb包才可以避免现有系统不同配置的影响而适用与各种不同配置的系统。 第二，这个安装过程实际上那个暗示了如何从无到有得建造一个操作系统。Linux操作系统的发端就是1990年Linux写给邮件列表的那封信。在已有系统软件——包括编译器，链接器的帮助下，生产内核代码才是可能的。用软件来制造软件。这是一个非常自然的过程。我记得有一句话叫“以机器制造机器标志这第二次工业革命的开始”。而以软件制造软件也是现在软件行业的一个重要标志。也只有当这种衍生和扩展的能力和半导体的几何级数式的蓬勃发展结合起来的时候，这种能力才创造了极大的社会财富。 第三，一些配置和编译的选择也值得讨论一下。 首当其冲的就是UEFI和GPT分区。区别与传统的BIOS和MBR分区，这两个技术都有一些进步。GPT几乎是必要的（desirable）。但是，如果你的系统主板是建立在UEFI之上的话，Linux系统可能会遇到一些问题。这并不是Linux的错，而是因为大多说UEFI固件都缺乏必要的测试问题百出，以至于根本无法保证系统兼容性。对于后面这一点我实在没有什么好的建议，大概能说的只有一条，选择UEFI主板的时候一定要先调查一下再做决定。 创建分区和创建文件系统的分离是让那些在Windows中模糊成一团的操作系统概念变得更加清晰了。对文件系统的选择又是另一个问题。一般来说根据用户的实际应用应该选择不同的文件系统，比如，一些文件在处理“小文件”的时候有明显优势，一些文件系统有灵活配置的特性等等。当然，ext4文件系统适用于大多数桌面应用。虽然这个指南中仅仅提供了传统的采用/dev/sd*方式记述的/etc/fstab，但实际上Funtoo也支持UUID作为标记在/etc/fstab中使用。 对很多中文用户来说，键盘布局不是问题。因为，大多数在中国销售的计算机实际上是直接使用英语键盘布局的，所以/etc/conf.d/keymaps中采用默认值没有什么问题。我的情况比较特殊，因为日语键盘布局与英文键盘布局存在相当大的差异。我必须在上面提到的文件中制定键盘布局为jp106。如果你想在运行时改变系统的键盘布局，可以使用下面的命令。 setxkbmap xx ## xx 是两个字母的国家代码，比如us 当编译安装好的内核和基础系统可以启动以后，我尝试继续跟随Funtoo的指南对基础系统升级并且安装了X Server和必要的系统软件。这样，一个极简洁的Linux操作系统诞生了。]]></description>
			<content:encoded><![CDATA[<p>构建自己的Linux桌面系统的第一步，就是根据Funtoo网站上提供的<a href="http://www.funtoo.org/wiki/Funtoo_Linux_Installation" title="Funtoo installation" target="_blank">wiki页面</a>，编译，安装和配置基础系统（base system）。这包括</p>
<ul>
<li>制作一个SysRescureCD的live USB。&raquo;<a href="http://www.sysresccd.org/Sysresccd-manual-en_How_to_install_SystemRescueCd_on_an_USB-stick" target="_blank">详情</a></li>
<li>通过SysRescureCD提供的工具<a href="http://www.funtoo.org/wiki/Funtoo_Linux_Installation#Prepare_Hard_Disk" target="_blank">初始化硬盘</a>，并且在硬盘上<a href="http://www.funtoo.org/wiki/Funtoo_Linux_Installation#Installing_the_Stage_3_tarball" target="_blank">安装stage3</a>——也就是最基础的根文件系统。</li>
<li><a href="http://www.funtoo.org/wiki/Funtoo_Linux_Installation#Configuring_your_system" target="_blank">配置</a>这个最基础的系统。</li>
<li>利用该文件系统提供的基础工具<a href="http://www.funtoo.org/wiki/Funtoo_Linux_Installation#Configuring_and_installing_the_Linux_kernel" target="_blank">编译安装Linux内核</a>。</li>
<li><a href="http://www.funtoo.org/wiki/Funtoo_Linux_Installation#Installing_a_Bootloader" target="_blank">安装grub2</a>作为bootloader。</li>
</ul>
<p>如果你对类Unix系统的基本概念非常了解，这个过程看上去应该是水到渠成的。安装的细节虽然无需多言，Funtoo提供的指南已经十分详尽，但这里却有一些非常有趣的概念值得讨论。</p>
<p>第一，这个安装过程的全部魔法都在chroot命令上。我一直以为这个命令是类Unix操作系统设计的精华之一。为什么这么说呢？众所周知，Linux操作系统对它的跟文件系统有一个必要的假设。即，<a href="http://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard" target="_blank">根文件系统是一棵树</a>。而这个树的根就是“/”。像硬盘，SSD之类的块设备可以通过“挂载”（mount）的方式，将实体的存储设备挂载到这棵逻辑中存在的树的任意节点上。当系统在这棵树上创建新文件或者修改任何既有内容时，这种变更就会被反映到实际的存储设备上。树结构的妙处在于，任意一棵子树和拥有该子树的“大树”总是相似的。当你将准备好的硬盘分区挂载到这棵树上，并且chroot进入这个树的子树，你就的到了一个全新的“根文件系统”。但于此同时，系统运行的却是原来大树中预装的Linux内核，由此来帮助新文件系统的生成。这种方法在Windows系统中听起来有点像天方夜谭但是在Linux系统中，却是司空见惯。采用这种方法可也在多个不同的根文件系统之间无缝的切换，比如，你可以在一个64位系统的根文件系统的某一棵子树上创建一个32位系统子树。这对于很多系统测试和环境搭建都不无裨益。一个典型的例子就是debian系统采用<a href="http://wiki.debian.org/Debootstrap" target="_blank">chroot的方式</a>帮助开发者创建一个便于创建软件包的标准环境，由此，<code>.deb</code>包才可以避免现有系统不同配置的影响而适用与各种不同配置的系统。</p>
<p>第二，这个安装过程实际上那个暗示了如何从无到有得建造一个操作系统。Linux操作系统的发端就是1990年Linux写给邮件列表的那封信。在已有系统软件——包括编译器，链接器的帮助下，生产内核代码才是可能的。用软件来制造软件。这是一个非常自然的过程。我记得有一句话叫“以机器制造机器标志这第二次工业革命的开始”。而以软件制造软件也是现在软件行业的一个重要标志。也只有当这种衍生和扩展的能力和半导体的几何级数式的蓬勃发展结合起来的时候，这种能力才创造了极大的社会财富。</p>
<p>第三，一些配置和编译的选择也值得讨论一下。</p>
<p>首当其冲的就是UEFI和GPT分区。区别与传统的BIOS和MBR分区，这两个技术都有一些进步。GPT几乎是必要的（desirable）。但是，如果你的系统主板是建立在UEFI之上的话，Linux系统可能会遇到一些问题。这并<a href="https://plus.google.com/102150693225130002912/posts/QLe3tSmtSM4" target="_blank">不是Linux的错</a>，而是因为大多说UEFI固件都缺乏必要的测试问题百出，以至于根本无法保证系统兼容性。对于后面这一点我实在没有什么好的建议，大概能说的只有一条，选择UEFI主板的时候一定要先调查一下再做决定。</p>
<p>创建分区和创建文件系统的分离是让那些在Windows中模糊成一团的操作系统概念变得更加清晰了。对文件系统的选择又是另一个问题。一般来说根据用户的实际应用应该选择不同的文件系统，比如，一些文件在处理“小文件”的时候有明显优势，一些文件系统有灵活配置的特性等等。当然，ext4文件系统适用于大多数桌面应用。虽然这个指南中仅仅提供了传统的采用<code>/dev/sd*</code>方式记述的<code>/etc/fstab</code>，但实际上Funtoo也支持<a href="http://www.cyberciti.biz/faq/linux-finding-using-uuids-to-update-fstab/" target="_blank">UUID作为标记</a>在<code>/etc/fstab</code>中使用。</p>
<p>对很多中文用户来说，键盘布局不是问题。因为，大多数在中国销售的计算机实际上是直接使用英语键盘布局的，所以<code>/etc/conf.d/keymaps</code>中采用默认值没有什么问题。我的情况比较特殊，因为日语键盘布局与英文键盘布局存在相当大的差异。我必须在上面提到的文件中制定键盘布局为<code>jp106</code>。如果你想在运行时改变系统的键盘布局，可以使用下面的命令。</p>
<pre>setxkbmap xx   ## xx 是两个字母的国家代码，比如us</pre>
<p>当编译安装好的内核和基础系统可以启动以后，我尝试继续跟随Funtoo的指南<a href="http://www.funtoo.org/wiki/Funtoo_Linux_First_Steps" target="_blank">对基础系统升级并且安装了X Server和必要的系统软件</a>。这样，一个极简洁的Linux操作系统诞生了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.adamjiang.com/archives/1154/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>以Funtoo为基础的Linux桌面系统（1）</title>
		<link>http://www.adamjiang.com/archives/1140</link>
		<comments>http://www.adamjiang.com/archives/1140#comments</comments>
		<pubDate>Mon, 14 May 2012 15:46:09 +0000</pubDate>
		<dc:creator>jcadam</dc:creator>
				<category><![CDATA[Linux tips]]></category>
		<category><![CDATA[Desktop]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[源代码]]></category>
		<category><![CDATA[环境配置]]></category>

		<guid isPermaLink="false">http://www.adamjiang.com/?p=1140</guid>
		<description><![CDATA[这个系列的最初起源是一大堆牢骚。当我觉得自己拯救自己的时候，我问了自己这样的问题——如果Ubuntu是错的，那么什么样的桌面系统是对的？也许我尚未找到答案，但至少我觉得以下几点是一个优秀的Linux桌面系统必须具备的特性 源代码是开源软件的灵魂，优秀的包管理系统是强健的骨骼；这个系统必须无缝的升级并且尽可能的贴近源码。 桌面系统必须是轻量级的；它可以快速的启动和关闭。 使用什么样的应用程序应该由用户选择，而这些应用程序之间可以通过统一接口调用。 第一个要求将我引向了Gentoo。Gentoo Linux是以源代码为基础的发行版。它最重要的特色就是portage/emerge包管理系统。每一个Gentoo软件包全部都会在初次安装时从软件的源代码编译生成。每当软件推出新版本的时候，portage/emerge可以帮助用户重新编译并且安装新版本。同时，portage/emerge还可以根据用户的需要，安装同一个软件的多个不同版本。因为不需要二进制和打包的中间过程，这种升级就真正做到了“无缝”。因为系统组建之间之间无非就是动态链接和静态链接创建的简单耦合。所以，它也消除了以二进制文件为基础的包管理系统所创建的不必要的强耦合关系。这使得用户升级和调试单独软件包是获得了充分的自由。这种自由还体现在一种叫做Overlay的机制上。Overlay就是“覆盖”的意思。Gentoo通过这种机制让用户可以创建自己的软件包,并且将这些软件包按照一定的规则排列成树状结构来覆盖/定制官方默认的编译选项和软件特性。当然，用户也可以给自己的Overlay中添加新软件。很多用户在使用Gentoo的同时会创建自己的Overlay。我也将自己的对软件包的选择固化成了一个Overlay，你可以在这里找到它。Funtoo Linux是在Gentoo项目的基础上发展起来的新项目，它区别于Gentoo的最大特色在于以git为核心的软件包更新机制（虽然现在Gentoo也支持以git为基础的同步和升级）。除此以外，Funtoo还提供了比Gentoo更优秀的用户辅助工具——比如boot-update，所以我选择了Funtoo作为基础来建造自己的桌面系统。 对于第二个问题，我的答案是Openbox。为什么不是Gnome或者KDE这样的Desktop environment？因为Gnome项目已经“误入歧途”，至少这是我通过观察得到的结论。而KDE却也不能称作“轻量级”。那么只有在众多的Window Manager（窗口管理器）中选择一款了。我最初尝试了Fluxbox，它非常优秀，可是对于cjk用户并不友好，因为我的Firefox的窗口标题连不能显示中文或者日语这些双字节文字。于是理所当然的，我选择了Openbox。Openbox的开发相对活跃，并且拥有广泛的用户基础。很多发行版都提供了Openbox软件，更有一款非常引人注目的Crunchbang发行版将Openbox作为桌面系统解决方案的基础。这也正是我学习的对象。 最后一点是最贴近用户的问题。每个人对软件的偏好不一样，所以，桌面系统中使用什么样的软件应该由用户自己来决定。一个Web开发者的桌面系统和一个Android开发者的桌面系统应当有很大的区别。比如，前者可能需要curl，bluefish，python/PHP编辑器和多个不同的浏览器——采用wine或者虚拟机安装的IE，不同版本的Firefox和Chrome——等等；而后者，则需要编译Android软件的必要的库和工具，可以运行虚拟机的Java环境，eclipse集成开发环境等等。核心工具集以外的软件，在大多数情况下只能被称作“冗余”而别无他用。当Ubuntu一股脑塞给我OpenOffice套件和Evolution的时候，往往我在安装结束后做的第一件事情就是卸载掉这些冗余。另一个问题是应用程序之间的接口。比如，Windows的COM组件，还有Mac OS的Apple Script，它们都提供了一个完全或者不完全的统一接口来解决应用程序之间通信和“宏操作”的问题。Linux桌面也同样必须拥有这样的机制，否则可能连copy/paste操作也是问题。DBus就是解决这个问题的不二之选。]]></description>
			<content:encoded><![CDATA[<p>这个系列的最初起源是一大堆<a href="http://www.adamjiang.com/archives/1125" target="_blank">牢骚</a>。当我觉得自己拯救自己的时候，我问了自己这样的问题——如果Ubuntu是错的，那么什么样的桌面系统是对的？也许我尚未找到答案，但至少我觉得以下几点是一个优秀的Linux桌面系统必须具备的特性</p>
<ul>
<li>源代码是开源软件的灵魂，优秀的包管理系统是强健的骨骼；这个系统必须无缝的升级并且尽可能的贴近源码。</li>
<li>桌面系统必须是轻量级的；它可以快速的启动和关闭。</li>
<li>使用什么样的应用程序应该由用户选择，而这些应用程序之间可以通过统一接口调用。</li>
</ul>
<p>第一个要求将我引向了Gentoo。Gentoo Linux是以源代码为基础的发行版。它最重要的特色就是portage/emerge包管理系统。每一个Gentoo软件包全部都会在初次安装时从软件的源代码编译生成。每当软件推出新版本的时候，portage/emerge可以帮助用户重新编译并且安装新版本。同时，portage/emerge还可以根据用户的需要，安装同一个软件的多个不同版本。因为不需要二进制和打包的中间过程，这种升级就真正做到了“无缝”。因为系统组建之间之间无非就是动态链接和静态链接创建的简单耦合。所以，它也消除了以二进制文件为基础的包管理系统所创建的不必要的强耦合关系。这使得用户升级和调试单独软件包是获得了充分的自由。这种自由还体现在一种叫做Overlay的机制上。Overlay就是“覆盖”的意思。Gentoo通过这种机制让用户可以创建自己的软件包,并且将这些软件包按照一定的规则排列成树状结构来覆盖/定制官方默认的编译选项和软件特性。当然，用户也可以给自己的Overlay中添加新软件。很多用户在使用Gentoo的同时会创建自己的Overlay。我也将自己的对软件包的选择固化成了一个Overlay，你可以在<a href="https://github.com/jcadam/picky-overlay" target="_blank">这里</a>找到它。<a href="http://www.funtoo.org/wiki/Welcome" target="_blank">Funtoo Linux</a>是在Gentoo项目的基础上发展起来的新项目，它区别于Gentoo的最大特色在于以git为核心的软件包更新机制（虽然现在Gentoo也支持以git为基础的同步和升级）。除此以外，Funtoo还提供了比Gentoo更优秀的用户辅助工具——比如boot-update，所以我选择了Funtoo作为基础来建造自己的桌面系统。</p>
<p>对于第二个问题，我的答案是Openbox。为什么不是Gnome或者KDE这样的Desktop environment？因为Gnome项目已经“误入歧途”，至少这是我通过观察得到的结论。而KDE却也不能称作“轻量级”。那么只有在众多的Window Manager（窗口管理器）中选择一款了。我最初尝试了Fluxbox，它非常优秀，可是对于cjk用户并不友好，因为我的Firefox的窗口标题连不能显示中文或者日语这些双字节文字。于是理所当然的，我选择了Openbox。Openbox的开发相对活跃，并且拥有广泛的用户基础。很多发行版都提供了Openbox软件，更有一款非常引人注目的<a href="http://crunchbanglinux.org/" target="_blank">Crunchbang</a>发行版将Openbox作为桌面系统解决方案的基础。这也正是我学习的对象。</p>
<p>最后一点是最贴近用户的问题。每个人对软件的偏好不一样，所以，桌面系统中使用什么样的软件应该由用户自己来决定。一个Web开发者的桌面系统和一个Android开发者的桌面系统应当有很大的区别。比如，前者可能需要curl，bluefish，python/PHP编辑器和多个不同的浏览器——采用wine或者虚拟机安装的IE，不同版本的Firefox和Chrome——等等；而后者，则需要编译Android软件的必要的库和工具，可以运行虚拟机的Java环境，eclipse集成开发环境等等。核心工具集以外的软件，在大多数情况下只能被称作“冗余”而别无他用。当Ubuntu一股脑塞给我OpenOffice套件和Evolution的时候，往往我在安装结束后做的第一件事情就是卸载掉这些冗余。另一个问题是应用程序之间的接口。比如，Windows的COM组件，还有Mac OS的Apple Script，它们都提供了一个完全或者不完全的统一接口来解决应用程序之间通信和“宏操作”的问题。Linux桌面也同样必须拥有这样的机制，否则可能连copy/paste操作也是问题。DBus就是解决这个问题的不二之选。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.adamjiang.com/archives/1140/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>打造嵌入式软件开发团队(3) 使用minicom做串口连接</title>
		<link>http://www.adamjiang.com/archives/545</link>
		<comments>http://www.adamjiang.com/archives/545#comments</comments>
		<pubDate>Thu, 28 May 2009 02:52:27 +0000</pubDate>
		<dc:creator>jcadam</dc:creator>
				<category><![CDATA[嵌入式Linux]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[minicom]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[嵌入式]]></category>
		<category><![CDATA[开发]]></category>
		<category><![CDATA[环境配置]]></category>

		<guid isPermaLink="false">http://www.adamjiang.com/?p=545</guid>
		<description><![CDATA[minicom的初始配置 起动minicom 在终端中敲minicom，然后回车&#8230;&#8230;（画外音：老兄，这个地球人都知道吧）。 $ minicom 如果你非常unlucky，发行版的默认安装中居然没有包含这个简单易用的串口连接工具，那么，找apt-get帮忙吧。 $ apt-cache search minicom $ sudo apt-get install minicom 这里需要注意的问题是，如果你的locale设置的是中文，那么minicom打开后，那些边边角角条条框框会不能对齐，这基本山是因为程序本身不能计算双字节字符在屏幕上的正确宽度造成的，如果你英文好一些，并且不愿忍受破坏视觉的痛苦，推荐使用下面的命令启动minicom。 $ LC_ALL=C minicom 为了以后方便一些，就直接把这个命令写入$HOME/bin/里面，并且将这个路径添加进入PATH变量最前面的位置用以替换默认的minicom启动程序。 $ echo "#!/bin/sh LC_ALL=C minicom" > $HOME/bin/minicom $ chmod +x $HOME/bin/minicom 如果minicom是第一次启动，打开之后就会遇到提示，可能有两种情况 minicom说普通用户不能打开设备文件/dev/modem之类，如果你确信你需要使用这个设备进行通信，那么请用root用户或者sudo命令将这个设备文件更改访问属性； minicom说找不到默认的配置文件 恩，我们要说的就是如何给他配置起来，接着看吧。 打开配置菜单 第一次启动minicom可以使用root身份打开，并且加入-s选项，这是为了方便配置。 $ LC_ALL=C sudo minicom -s 这时回打开一个对话菜单，它长的有点像下面这个样子。 +-----[configuration]------+ &#124; Filenames and paths &#124; &#124; File transfer protocols &#124; &#124; [...]]]></description>
			<content:encoded><![CDATA[<h3>minicom的初始配置</h3>
<h4>起动minicom</h4>
<p>在终端中敲minicom，然后回车&#8230;&#8230;（画外音：老兄，这个地球人都知道吧）。<br />
<code><br />
$ minicom<br />
</code><br />
如果你非常unlucky，发行版的默认安装中居然没有包含这个简单易用的串口连接工具，那么，找apt-get帮忙吧。<br />
<code><br />
$ apt-cache search minicom<br />
$ sudo apt-get install minicom<br />
</code><br />
这里需要注意的问题是，如果你的locale设置的是中文，那么minicom打开后，那些边边角角条条框框会不能对齐，这基本山是因为程序本身不能计算双字节字符在屏幕上的正确宽度造成的，如果你英文好一些，并且不愿忍受破坏视觉的痛苦，推荐使用下面的命令启动minicom。<br />
<code><br />
$ LC_ALL=C minicom<br />
</code><br />
为了以后方便一些，就直接把这个命令写入$HOME/bin/里面，并且将这个路径添加进入PATH变量最前面的位置用以替换默认的minicom启动程序。<br />
<code><br />
$ echo "#!/bin/sh LC_ALL=C minicom" > $HOME/bin/minicom<br />
$ chmod +x $HOME/bin/minicom<br />
</code><br />
如果minicom是第一次启动，打开之后就会遇到提示，可能有两种情况</p>
<ol>
<li>minicom说普通用户不能打开设备文件/dev/modem之类，如果你确信你需要使用这个设备进行通信，那么请用root用户或者sudo命令将这个设备文件更改访问属性；</li>
<li>minicom说找不到默认的配置文件</li>
</ol>
<p>恩，我们要说的就是如何给他配置起来，接着看吧。</p>
<h4>打开配置菜单</h4>
<p>第一次启动minicom可以使用root身份打开，并且加入-s选项，这是为了方便配置。<br />
<code><br />
$ LC_ALL=C sudo minicom -s<br />
</code><br />
这时回打开一个对话菜单，它长的有点像下面这个样子。</p>
<pre>
            +-----[configuration]------+
            | Filenames and paths      |
            | File transfer protocols  |
            | Serial port setup        |
            | Modem and dialing        |
            | Screen and keyboard      |
            | Save setup as dfl        |
            | Save setup as..          |
            | Exit                     |
            +--------------------------+
</pre>
<p>用上下键选择Serial port setup，选择进入。</p>
<pre>
    +-----------------------------------------------------------------------+
    | A -    Serial Device      : /dev/ttyS0                                |
    | B - Lockfile Location     : /var/lock                                 |
    | C -   Callin Program      :                                           |
    | D -  Callout Program      :                                           |
    | E -    Bps/Par/Bits       : 115200 8N1                                |
    | F - Hardware Flow Control : No                                        |
    | G - Software Flow Control : No                                        |
    |                                                                       |
    |    Change which setting?                                              |
    +-----------------------------------------------------------------------+
</pre>
<p>将串口的各个配置值设置成你需要的样子。按每个选项前面的字母键进入配置选单。其中，Serial Device需要指定成你实际使用的串口设备的设备文件；Lockfile Location使用默认就可以了，这个文件使用来锁定设备的，以保证不会设备被另外一个程序同时使用；Callin/out Program略去，嵌入式软件开发的时候大多不需要这个，这选项大概是留给调制解调器用的，我也不晓得；Bps/Par/Bits用来配置你的串口的通讯速度，这里我的设备选择了115200 8N1的选项，跟据你的设备选择相应的值；Hardware/Software Flow Control是RS232协议的一部分，用以控制两个设备之间消息传递的流控制——这个玩意儿一两句讲不清楚，有兴趣的话看<a href="http://www.lammertbies.nl/comm/info/RS-232_flow_control.html" title="RS232 flow control and handshaking">RS232 flow control and handshaking</a>——这个例子里选择NO。<br />
不同的RS232连接线或者开发版的特殊设计都会导致你需要的配置与例子所说的不同，所以，还是查看一下硬件的连接方式手册再进行配置比较好。</p>
<p>配置完成后，在配置菜单中选择Save setup as dfl，这样就可以将配置结果保存成默认设置。</p>
<h4>测试</h4>
<p>如果你的开发板中已经烧入了相应的固件支持串口通信的话（一般都会有），这个时候可以给开发版加电测试一下通信状况了。如果配置没有出错，那么就应该有相应的内容表示。<br />
值得一提的是折行控制。如果不进行选择的话，minicom提供的终端是不会折行的，也就是说你输入终端的内容在表示的时候会被短截，为了让自己看得清楚一些，可以用CTRL+A W来进行切换。</p>
<h4>退出</h4>
<p>在minicom的画面中按CTRL+A，接着按X键。或者CTRL+A Q。两者的区别是X会重置modem，而Q不会重置，并且Q选项需要用户确认。</p>
<p>此后就无须多言了，串口连接只是提供一种连接方式，连接以后根据开发板给公给你的界面，该干嘛干嘛就好了。</p>
<p>&#8211;<br />
参考URL：<br />
<a href="http://www.interface.co.jp/cpu/sh240_howto/howto06.asp">http://www.interface.co.jp/cpu/sh240_howto/howto06.asp</a><br />
<a href="http://tldp.org/HOWTO/Serial-HOWTO.html">http://tldp.org/HOWTO/Serial-HOWTO.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.adamjiang.com/archives/545/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>打造嵌入式软件开发团队(2) tftp服务器</title>
		<link>http://www.adamjiang.com/archives/514</link>
		<comments>http://www.adamjiang.com/archives/514#comments</comments>
		<pubDate>Sun, 24 May 2009 13:01:40 +0000</pubDate>
		<dc:creator>jcadam</dc:creator>
				<category><![CDATA[嵌入式Linux]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[嵌入式]]></category>
		<category><![CDATA[环境配置]]></category>

		<guid isPermaLink="false">http://www.adamjiang.com/?p=514</guid>
		<description><![CDATA[上回书说到嵌入式开发环境的根文件系统如何通过NFS挂载，接下来说一下内核如何通过tftp服务器调试和加载。 Bootloader 通过tftp加载内核的前提是，开发使用的bootloader支持tftp功能。这样的bootloader有很多，在MIPS结构(MIPS4K,BRCM,龙芯等处理器)上，可以尝试使用U-Boot或者CFE。其中U-Boot适用于多种平台，包括ARM,PowerPC,MIPS等多中体系结构，而CFE是Broadcom公司开发的一个开放源代码BL，被广泛应用于MIPS结构。 安装和配置TFTP服务器 在Debian base的Ubuntu系统上安装tftp的方法非常简单。首先，你可以尝试用apt-cache命令查看一下发行版上都提供了哪些tftp相关的软件可以使用。 $ apt-cache search tftp ... tftp-hpa - HPA's tftp client tftpd-hpa - HPA's tftp server atftp - advanced TFTP client atftpd - advanced TFTP server ... tftp - Trivial file transfer protocol client tftpd - Trivial file transfer protocol server atftp和tftp-hpa都是比较特殊的版本，所以，为了简便起见，这个介绍中只安装通用的tftp和tftpd。你可以使用下面的命令安装TFTP。 $ sudo apt-get install tftpd tftp 确认inetd.conf中是否正确安装了tftpd。 grep [...]]]></description>
			<content:encoded><![CDATA[<p>上回书说到嵌入式开发环境的根文件系统如何通过NFS挂载，接下来说一下内核如何通过<a href="http://www.adamjiang.com/wiki/index.php?title=%E5%B7%A5%E5%85%B7#TFTP.E6.9C.8D.E5.8A.A1.E5.99.A8">tftp服务器</a>调试和加载。</p>
<h2>Bootloader</h2>
<p>通过tftp加载内核的前提是，开发使用的<a title="什么是Bootloader" href="http://www.adamjiang.com/wiki/index.php?title=%E5%90%AF%E5%8A%A8%E8%BF%87%E7%A8%8B">bootloader</a>支持tftp功能。这样的bootloader有很多，在MIPS结构(MIPS4K,BRCM,龙芯等处理器)上，可以尝试使用<a title="U-Boot的主页" href="http://www.denx.de/wiki/U-Boot/WebHome">U-Boot</a>或者<a title="CFE的下载页面" href="http://ja.broadcom.com/support/communications_processors/downloads.php">CFE</a>。其中U-Boot适用于多种平台，包括ARM,PowerPC,MIPS等多中体系结构，而CFE是Broadcom公司开发的一个开放源代码BL，被广泛应用于MIPS结构。</p>
<h2>安装和配置TFTP服务器</h2>
<p>在Debian base的Ubuntu系统上安装tftp的方法非常简单。首先，你可以尝试用apt-cache命令查看一下发行版上都提供了哪些tftp相关的软件可以使用。</p>
<p><code><br />
$ apt-cache search tftp<br />
...<br />
tftp-hpa - HPA's tftp client<br />
tftpd-hpa - HPA's tftp server<br />
atftp - advanced TFTP client<br />
atftpd - advanced TFTP server<br />
...<br />
tftp - Trivial file transfer protocol client<br />
tftpd - Trivial file transfer protocol server<br />
</code></p>
<p>atftp和tftp-hpa都是比较特殊的版本，所以，为了简便起见，这个介绍中只安装通用的tftp和tftpd。你可以使用下面的命令安装TFTP。</p>
<p><code><br />
$ sudo apt-get install tftpd tftp<br />
</code></p>
<p>确认inetd.conf中是否正确安装了tftpd。</p>
<p><code><br />
grep tftp /etc/inetd.conf<br />
</code></p>
<p>准备TFTP服务器使用的目录，可以在这个目录中放入需要共享的文件，比如编译好的内核image文件。</p>
<p><code><br />
$ sudo mkdir /tftpboot<br />
$ sudo chmod 777 /tftpboot<br />
</code></p>
<p>一般，为了配置简便，通常将tftp服务的目录放在/tftpboot，当然这个位置是可以配置的，在/etc/inetd.conf文件中，可以看到tftp目录被放在了/srv/tftp中，你可以根据需要更改。</p>
<p><code><br />
$ sudo sed -e "s,/src/tftp,/tftpboot," /etc/inetd.conf &gt; \<br />
/etc/inetd.conf_out &amp;&amp; \<br />
sudo mv /etc/inetd.conf /etc/inetd.conf_bak &amp;&amp; \<br />
sudo mv /etc/inetd.conf_out /etc/inetd.conf<br />
</code></p>
<p>测试一下。</p>
<p><code><br />
$ echo "HELLO" &gt; /tftpboot/FILE.txt<br />
$ tftp<br />
tftp&gt; connect localhost<br />
tftp&gt; get FILE.txt<br />
</code></p>
<div style="margin-left: 5%; border-left:medium solid #999; padding-left: 3%">
<p>另外一个选择是使用<strong>xinet.d</strong>来驱动tftpd，取代inet.d。</p>
<p><strong>安装xinet.d。</strong><br />
<code><br />
$ sudo apt-get install xinetd<br />
</code><br />
<strong>配置tftpd服务。</strong></p>
<p>打开/etc/xinet.d/tftpd文件，根据下面的样子照猫画虎就行了，需要注意的是disable=yes这一行变成disable=no。另外，默认的配置文件中可能需要增加访问控制选项，即将only_from这个选项固定为局域网。</p>
<p><code><br />
service tftp<br />
{<br />
protocol        = udp<br />
port            = 69<br />
socket_type     = dgram<br />
wait            = yes<br />
user            = nobody<br />
group           = nobody<br />
server          = /usr/sbin/in.tftpd<br />
server_args     = /tftpboot<br />
only_from       = 192.168.1.0/24<br />
disable         = no<br />
}<br />
</code></p>
<p>使用xinet.d的好处是安全性增强。也是一个比较不错的选择。</p></div>
<p>&#8211;<br />
参考URL：<br />
<a href="http://0x100.com/Gentoo/Server/tftpd.html">http://hogeo.jp/blog/memo/2008/07/tftpubuntu.html</a><br />
<a href="http://0x100.com/Gentoo/Server/tftpd.html">http://0&#215;100.com/Gentoo/Server/tftpd.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.adamjiang.com/archives/514/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

