Debian在PC引擎WRAP板与Microdrive

建立一个用于通用目的的PC引擎卷装系统


关键词:PC引擎封装WRAP平板机平台LINUX DEBIAN SBC SOC LINUX封装低功耗小型服务器

作者:Nathan L. Cutler
日期:2006年6月18日

免责声明

这份文件是为了向某人证明是有用的。 但是,如果您遵循本文档中描述的步骤,您可以在自己的风险中进行。 作者不保证按照这里的说明将导致预期的结果。 对于任何阅读或以其他方式使用本文档的人,作者不承担任何责任。

背景

我已经运行linux或多或少用户十年以上。 在过去几年中,我并没有真正做到这一点。 2006年5月,我的朋友Chip Coldwell(http://frank.harvard.edu/~coldwell)告诉我有关他已经获得的基于ARM的单板计算机(SBC),并且正在变成一个应答机。 他正在做一些整洁的事情,就像在内核的串行驱动程序中启用DMA传输一样。 以前我听说过“嵌入式计算”一词,直到那时我才明白这是什么意思。 当我看到Chip的SBC的图片(基于Atmel的“系统级芯片”(SoC)芯片(双关)),并在网上阅读关于在这些微小的剥离电脑上运行Linux的人,我被迷住了通过使用一个消耗不到10W功率的linux系统,没有旋转风扇和磁盘的想法。 我最终没有得到一个没有纺球迷的系统,但是我确实不得不放松并得到一个旋转的磁盘。

我花了大约一个星期的时间来看待各种选择,但是基本上已经归结为三个:

  • 来自瑞士的PC引擎 (http://www.pcengines.ch)的WRAP平台
  • 基于C3 Eden芯片的VIA EPIA板(Mini-ITX外形)
  • 复活一个旧的奔腾90板(带有被动散热器),安装一个USB适配器并使用闪存驱动器而不是硬盘

这些按照我考虑的顺序列出。 起初我是WRAP的gung-ho,但很快就开始担心它会因为我的需要而不足,因为我梦想用它来播放MP3和运行X,并且这样的东西,WRAP没有声音或VGA能力没有办法添加它们。 所以我打开了VIA的EPIA板,其中一个有一个板载DC-DC转换器,可以从“墙壁疣”运行。 再次,经过几天的研究,我已经准备好购买组件并建立一个系统。 但是,我的妻子建议在做出这样的投资之前等待更好,我感到冷漠,开始考虑超低成本的替代方案(上面的列表中的第三个)。 然而,为此,我必须购买一个新的无风扇开关电源和一个USB适配器,增加了巨大的成本,我知道这样的系统比WRAP或威盛EPIA消耗更多的功率。

后来我意识到固态存储卡和闪存驱动器真的不适合运行通用系统。 它们可以对路由器和其他嵌入式应用程序有所帮​​助,这些应用程序可以使用只读驱动器+小型RAM盘,但是对于日常的Linux计算需求,您真的需要一个旋转的硬盘驱动器。 幸运的是,现在有价格实惠的Microdrives可以直接插入WRAP的CFsocket,它可以接受Type I和Type II CF卡。

我陷入困境

我最终决定了WRAP,原因如下:

  • 最低功耗的3个选项,到目前为止
  • 极致小型化 - 使其看起来更冷
  • 支持小企业 - 董事会由瑞士的一个人设计,而不是一家公司
  • 它可以修改为支持USB,所以我可以连接打印机和CDMA调制解调器。
  • 它具有比旧的Pentium 90板更多的内存(128MB),难以找到内存模块
  • 我可以没有音频和视频功能,因为我可以随时在我的常规linux盒子上做A / V的东西

所以我买了WRAP板。 由于我想要并且需要我的系统具有USB功能,所以我惊喜地听到他们手上有一个双USB适配器,所以我也得到了。 稍后再添加USB选项。 我还购买了一个Compact Flash-IDE适配器,据称它可以将CF卡插入一个常规的IDE接口,并且看起来像一个硬盘。

回家后,我意识到两个关键组件仍然缺少:(1)根文件系统的CF卡,(2)一个空调制解调器电缆,如果没有,我将无法观看引导消息。 对于电源,我决定使用我在存储中的“通用”AC / DC电源适配器。 我找到了,找到一个适合板的连接器,并用万用表测试输出。 它在12V时死机,我假设它产生的6VA将足以为WRAP板供电。

您需要的NULL调制解调器电缆在两端都有9针母连接器。 由于WRAP板没有任何VGA功能,因此在第二台计算机上使用终端仿真器,进入BIOS设置并观看引导消息的唯一方法是通过串行端口(因此为空调制解调器电缆)。

CF卡或Microdrive?

起初我有一个错误的想法,我将根文件系统在一个512MB CF卡上,剩下的数据在1GB闪存驱动器通过USB 1.1连接(WRAP不支持USB 2.0)。 幸运的是,我没有购买闪存驱动器,虽然我购买了CF卡 - 仍然,它是便宜的(小于400 CZK),如果我决定使用WRAP作为专用的,我可以保持Voyage Linux安装路由器。

尝试在CF卡上安装Debian系统,并在tmpfs(RAM磁盘)文件系统上仅使用某些关键任务文件和目录的情况下使其正常工作,从而放弃并安装了Voyage Linux 0.2 。 这是相对无痛的,很高兴看到我的小WRAP板启动,并给我一个linux提示,但逐渐的,我明白了,我真的需要一个硬盘驱动器,因为我想使用系统在一天 - 每天都需要根文件系统进行读写。 经过一番研究,我到达了三个不同的选择,为WRAP添加一个硬盘:

  • 构建我自己的CF到IDE适配器(即允许我将IDE驱动器插入WRAP板上的CFsocket)
  • 购买NASD(网络连接存储设备),重新固定其上的固件,使其运行Linux,将NFS共享出口到WRAP
  • 购买Microdrive并将其插入WRAP上的CFsocket

我按照他们来找我的命令写了他们。 第一个选择对我来说最有趣,因为我觉得我有三个或四个3.5“的驱动器,我可以使用其中的一个。但是,令人难以置信的是,似乎没有可用的适配器,将CFsocket插入IDE端口,即使CFsocket以“True IDE”模式运行,部分问题是电压 - WRAP板只提供3.3V到CF,而IDE驱动器需要5V,这使得它更多的是一种硬件黑客类型的命题,涉及焊接44根线。使用标准IDE连接器很困难,但CF连接器要小得多,这是不可能的。

截至昨天,我不知道NAS有这样的事情。 我发现了他们,因为我认为也许存在一个适配器将IDE驱动器挂接到RJ45以太网端口。 我想,因为我有一个额外的LAN接口,我没有使用,我可以挂这个硬盘。 果然,我发现一堆小盒子里面有硬盘,你只需把它们插入你的局域网就可以了。 事实上,这些盒子比3.5“硬盘要贵得多,因为它们包含SBC(单板计算机),但是我对自己说,一个SBC是我在这里建立的 - 它不会有两个人很有意义,但是我很想买一个Linksys LSLU2网络存储链接,因为我发现有一个活跃的爱好者社区在那里进行黑客攻击,甚至有几个不同版本的新固件,所以你可以完全刷新固件并把它变成一个Linux Box,这个解决方案似乎很有趣,但我不得不承认这是一个侧线。

从我与WRAP董事会设计师Pascal Dornier的通信中,我了解到您可以将Microdrive插入到WRAP中,并且它将工作。 我没有考虑过这个可能性,因为(1)我只是对“Microdrive”有一个模糊的概念,(2)我认为对于WRAP板的电源需要太多的电力,(3)我以为WRAP只采用CF Type I卡。结果Microdrive是一个理想的解决方案--Pascal坚持认为它会工作,所以我出去买了一个。 克服这个障碍,将我的小WRAP板转变成通用Linux盒的方法是开放的。

根据技术规格,IBM / Hitachi 4GB Microdrive在3.3V写入时消耗395mA,为1.3瓦。

设置根文件系统

由于我有一段时间在周末,我在网上捅了一圈,并发现了一个HOWTO(实际上是一个博客条目)由Jan Willem(http://www.lextreme.nl)在WRAP板上安装一个常规的Debian系统。 这一点吸引了我,因为替代品,如Voyage Linux,而明确支持WRAP,适用于无线路由应用程序,并从CF卡运行根文件系统。 我正在寻找一个更通用的解决方案,只是平凡的Debian似乎是理想的。 安装很简单。 您需要一个CF到IDE适配器,以便将Microdrive插入已经运行Linux的计算机,并具有Internet连接或Debian安装CD。 基本上,它归结为以下基本步骤,它们只是Jan Willem程序的稍微修改版本:

  • 使用fdisk,在Microdrive,swap和root上创建两个分区
  • 使用mkfs.ext3格式化Microdrive(我将使用日志文件系统)和mkswap
  • 安装Microdrive,比如说/ mnt
  • 使用debootstrap,在/ mnt下载并安装最小的Debian系统
  • 从Voyage Linux 0.2安装2.6.15内核,设置模块
  • 运行lilo -r / mnt来安装lilo bootloader
  • 将微盘移动到WRAP
  • 启动WRAP
这只是一个通用的步骤列表。细节如下。

fdisk

将我的CF到IDE卡插入我的Linux Box的IDE1端口,将Microdrive插入CFsocket,并启动Linux盒,dmesg将Microdrive看作是/ dev / hdc:
hdc: HMS360404D5CF00, CFA DISK drive
...
hdc: max request size: 128KiB
hdc: 7999488 sectors (4095 MB) w/128KiB Cache, CHS=7936/16/63, UDMA(33)
hdc: cache flushes supported
  hdc: hdc1
所以我以root身份运行“fdisk / dev / hdc” Microdrive已预格式化FAT32文件系统。
Disk /dev/hdc: 4095 MB, 4095737856 bytes
128 heads, 63 sectors/track, 992 cylinders
Units = cylinders of 8064 * 512 = 4128768 bytes
   Device Boot      Start         End      Blocks   Id  System
/dev/hdc1   *           1         992     3999712+   b  W95 FAT32
因此,第一步是深入六个宝宝,并在其位置创建交换分区和根分区。
Disk /dev/hdc: 4095 MB, 4095737856 bytes
128 heads, 63 sectors/track, 992 cylinders
Units = cylinders of 8064 * 512 = 4128768 bytes
   Device Boot      Start         End      Blocks   Id  System
/dev/hda1               1          32      128992+  82  Linux swap / Solaris
/dev/hda2              33         992     3870720   83  Linux

如您所见,我把交换分区放在磁盘的开头。 我可以逃避没有任何交换,但是什么呢? 128MB只有磁盘的3%左右。 使用单磁盘系统,交换分区“假定”位于磁盘的中心,但在我希望将单个文件系统中的所有数据都放在两个以上之前完成此操作。

初始化分区和挂载

无论如何,下面的命令是初始化新的分区:

mkswap /dev/hdc1
mkfs.ext3 /dev/hdc2
这两个没有搭便车,所以我把/ dev / hdc2作为/ mnt:
mount -t ext3 /dev/hdc2 /mnt

使用debootstrap安装最小的Debian系统

然后我发现,(1)ext3支持必须被编译到内核中,或者(2)我必须使用initramfs在引导时加载ext3模块。 这可能会导致Voyage Linux内核的问题,如果没有ext3编译,那么它是单一的,但是快速浏览“voyage-0.2 / boot / config-2.6.15-486-voyage”平静了我 ext3在那里 我可以继续

debootstrap sid /mnt ftp://ftp.cz.debian.org/debian/
我想安装“sid”,这是较新的,但是在尝试下载“base-config”通道的时候它失败了。由于某些原因,sid软件包列表包括“base-config”,但sid存储库不包含该包。不过后来我才知道要安装在像我这样的sarge系统上,我必须升级到debootstrap的sid版本,这实际上是很有意义的。在这样做之后,它工作,与一个错误。

接下来是什么?

在我之前尝试使用WRAP运行的Debian(使用CF卡)的时候,我立即在/ mnt chroot到/ mnt,并且在CF卡仍然在我的安装机器中时尝试配置系统。这没有太好的效果,特别是运行“base-config”时。问题是locales - 在chroot jail中,base-config没有看到任何locale支持,但是它可以看到我的区域环境变量。所以它吐了很多警告。想要避免这种情况,我将免除初始配置,并且正确地安装内核并运行lilo。

安装Voyage Linux 2.6.15内核

在为WRAP编译内核程序包之后,我放弃并下载了Voyage Linux 0.2,其中包含一个预编译的内核,该内核已经被修补以便与WRAP配合使用。这个内核的一个很好的功能(除了如上所述的编译ext3支持之外),它已经将所有内容都包含为模块。所以你不需要重新编译 - 如果你需要激活一个内核功能,你只需要把模块的名字添加到/ etc / modules中。

首先,我打开了这个航海-20的压缩包,并开始戳穿它。我执行了以下命令让Voyage内核覆盖到我的CF根文件系统:
cd voyage-0.2
cp -a boot/* /mnt/boot
cp -a lib/modules/* /mnt/lib/modules

基本设置(预启动)

内核模块

我处理的第一个配置文件是/ etc / modules。这是由用于WRAP板的Voyage Linux发行版设置脚本创建的/ etc / modules,减去WLAN驱动程序,这些文档不在本文档中:
# LAN interfaces
natsemi
# watchdog timer included in Geode SC1100 processor
# Uncomment the following line if you are running watchdog daemon
# wd1100 sysctl_wd_graceful=0 sysctl_wd_timeout=30
# thermal monitor hardware
lm77
# National Semiconductor SCx200 ACCESS.bus (needed for temperature reading)
scx200_acb base=0x820,0
我发生的另一件事是“depmod”,但是我意识到modules.dep文件已经在/mnt/lib/modules/2.6.15-486-voyage中,所以没有必要。

/ etc / inittab

要编辑的下一个配置文件是/ etc / inittab。这是重要的,否则你不会得到一个串行控制台。出于明显的原因,标准的Debian安装假设您将有一个键盘和VGA作为您的Linux控制台。但是WRAP需要一个串行控制台。这意味着我们编辑/ etc / inittab以摆脱虚拟控制台并启用串行控制台。这是非常简单的,但您必须小心波特率 - 如果它不符合WRAP BIOS所期望的,在启动时您将看不到终端仿真器中的任何内容。要了解WRAP设置的内容,请在WRAP进行初始内存测试时按“s”键。这将让您进入BIOS菜单,您可以在其中设置9600,38400或更高的波特率。我去了38400.这是完整的/ etc / inittab文件:
# /etc/inittab: init(8) configuration.
# $Id: index.html,v 1.2 2006/06/19 08:52:38 livingston Exp $

# The default runlevel.
id:2:initdefault:

# Boot-time system configuration/initialization script.
# This is run first except when booting in emergency (-b) mode.
si::sysinit:/etc/init.d/rcS

# What to do in single-user mode.
~~:S:wait:/sbin/sulogin

# /etc/init.d executes the S and K scripts upon change
# of runlevel.
#
# Runlevel 0 is halt.
# Runlevel 1 is single-user.
# Runlevels 2-5 are multi-user.
# Runlevel 6 is reboot.

l0:0:wait:/etc/init.d/rc 0
l1:1:wait:/etc/init.d/rc 1
l2:2:wait:/etc/init.d/rc 2
l3:3:wait:/etc/init.d/rc 3
l4:4:wait:/etc/init.d/rc 4
l5:5:wait:/etc/init.d/rc 5
l6:6:wait:/etc/init.d/rc 6
# Normally not reached, but fallthrough in case of emergency.
z6:6:respawn:/sbin/sulogin

# What to do when the power fails/returns.
pf::powerwait:/etc/init.d/powerfail start
pn::powerfailnow:/etc/init.d/powerfail now
po::powerokwait:/etc/init.d/powerfail stop

# Serial console for WRAP
T0:23:respawn:/sbin/getty -L ttyS0 38400 vt100
最后一行在串行端口运行getty,允许以root身份登录。

/ etc / fstab

在这里我们用KISS策略(Keep It Simple,Stupid)。由于我们有一个Microdrive,我们可以免除最小化对根文件系统的写入次数的概念。
# WRAP with Microdrive
/dev/hda1 swap swap defaults, 1 1
/dev/hda2 / ext3 defaults, 0 0
proc /proc proc defaults

/etc/apt/sources.list

该文件由“apt-get”用于查找deb包的存储库。此时我们只需要一个条目:
deb http://ftp.debian.cz/debian/ sid main
一旦我们在/ mnt树中创建了这个文件,我们就会插入并安装其他软件包。有些像“少”一样是便利的,但像“lilo”这样的其他人是至关重要的,没有他们就无法启动WRAP。
chroot /mnt /bin/bash
mount /proc
apt-get update
apt-get install watchdog # goes with wd1100 module
apt-get install less
apt-get install lilo # CRITICAL! THIS IS A MUST!
apt-get install udev # CRITICAL! THIS IS A MUST!
apt-get install [your favorite package that you can't live without]
请注意,据我所知,grub不能与WRAP协同工作,您必须使用LILO。我只是重复我读的内容
其他地方,但不是说经验。

/etc/lilo.conf

下一步是安装lilo(我真的得到这么远吗?)。这是我怎么做到的在黑客入侵和RTFMing之后,我想出了这个配置文件:
boot = /dev/hdc # Microdrive shows up as /dev/hdc on my system
disk = /dev/hdc # Microdrive
bios = 0x80 # WRAP's BIOS will see this as Primary Master
#compact
lba32 # set LBA in WRAP BIOS setup - but I tried it with CHS and it works, too
install=text
map=/boot/map
vga=normal
delay=1
timeout=50
prompt
serial=0,38400n8 # No way to set duplex, so I get doubling of each character on boot. Sigh.
default=Linux

image=/vmlinuz
# initrd=/initrd.img # Voyage Linux does not use initramfs (Thank God!)
root=/dev/hda2 # This is how the Microdrive will appear on the WRAP
label=Linux
append="console=ttyS0,38400n8 reboot=bios"
read-only
# restricted
# alias=1
如果您使用“sid”,则会有一个搭便车:“sid”中的chroot与sarge中的chroot不同。在chroot环境中,根本没有“/ dev / hda”或“/ dev / hdc”。当你运行“df”你得到这个:
Filesystem 1K-blocks Used Available Use% Mounted on
sysfs 3809936 220184 3396216 7% /sys
哪个是Microdrive,但不是“/ dev / hdc”。仔细看看/ dev目录,我看到只有最少的设备文件不包括/ dev / hdc。所以“lilo -t”会产生一个找不到/ dev / hdc的错误。此外,需要创建根目录中的符号链接“vmlinuz”。我想出的解决方法如下,假设我们已经chroot到/ mnt:
cd /
ln -si boot/vmlinuz-2.6.15-486-voyage vmlinuz
cd dev
./MAKEDEV hda
./MAKEDEV hdc
lilo -t
在我的系统上,这样做足以让lilo -t没有错误。
接下来我做了:
lilo -v # went without errors
umount /proc # don't know if this is necessary
exit # leave the chroot
umount /dev/hdc2 # unmount the Microdrive
shutdown -h now

真理的时刻

剩下的一切就是将Microdrive固定在WRAP板上,并将其加电。但是,如果你想看它启动(我确信你这样做),你必须使用一个DB9(女)到DB9(母)的空调制解调器电缆(也称为)将WRAP板的串行端口连接到另一台计算机作为Laplink电缆)。
这些仍然可以被购买,尽管它们通常是特殊订单项。一旦连接了两端的空调制解调器电缆,就运行一个终端仿真程序,例如(在Winblows)的TuTTY(比Hyperterminal更好)或(在Linux下)minicom。正确的设置是:
baud rate: 38400 (or whatever the WRAP board is configured for)
data bits: 8
parity: none
stop bits: 1
flow control: XON/XOFF
这是我们一直在等待的那一刻!在我的情况下,它启动并且给我一个登录提示:
Debian GNU/Linux testing/unstable wrap ttyS0

wrap login:
您首次登录时没有root密码,因此您只需键入“root”即可获得根提示。

配置(启动后)

从Microdrive启动的WRAP才刚刚开始。还有一些配置留下来。

看门狗守护进程

这里有几件事要记住。首先,如果将wd1100线路放在/ etc / modules中,则必须运行watchdog守护进程,否则wd1100模块会在不晚于30秒内重新启动系统!所以要小心激活wd1100内核模块。

如果你激活它(使用上面给出的参数),所有你需要做的就是“apt-get install watchdog”,而Microdrive仍然在安装机器中(在启动WRAP之前),没有任何问题。 watchdog守护进程设置为每隔10秒自动写入/ dev / watchdog,而wd1100模块只有在/ dev / watchdog在30秒以上未被写入时才会重新启动。所以你是安全的如果您喜欢,可以将/etc/watchdog.conf中的“间隔”调整为15秒。

另一件需要注意的是启动时候是看门狗守护进程。在我的系统上,这是最后一件事。这意味着如果任何其他启动项目延迟或超时,wd1100模块将运行,但看门狗守护程序将无法及时启动,以防止重新启动系统。所以,在我的系统上,我把看门狗启动转移到了引导过程的一个早期阶段。我想确保它在ntpdate之前启动,因为它连接到Internet服务器以获得当前时间,因此容易受到延迟。

网络

配置网络超出了本文档的范围。您需要的最低限度是在/ etc / network / interfaces中设置一个固定的IP接口,并将其指向/etc/resolv.conf中的Nameservers。也可以设置/ etc / hostname和/ etc / hosts(如果您的网络上有其他固定IP机器,则可以将其IP地址放在/ etc / hosts中,并将地址映射到可读取的名称,例如“雏菊”或“小馅饼”)。

Telnet / ssh

如果您正在使用Hyperterminal与WRAP进行通信,那么您很快就会期待使用PuTTY。为了工作,您需要设置telnet(强制性安全警告:telnet不安全 - 密码不加密,理论上有人可以通过监听telnet端口捕获您的密码)或ssh。我需要一个快速而肮脏的解决方案,所以我做telnet。首先,将以下行添加到/etc/inetd.conf中:
#:STANDARD: These are standard services.
telnet stream tcp nowait telnetd.telnetd /usr/sbin/tcpd /usr/sbin/in.telnetd
然后使用“apt-get install telnetd”安装telnetd软件包,并得到inetd superserver运行(“Debug”sid“中的”/etc/init.d/openbsd-inetd start“)。在sid上设置ssh可以说更容易。你所要做的就是:
apt-get install openssh-server

它占用2 MB的磁盘空间,但是如果外部人员甚至有机会连接到您的计算机的telnet端口,那么我会留给您来决定哪一个更好。

然而,在使用telnet或ssh之前,您必须通过“adduser”设置用户帐户。 通过“passwd”设置root密码也是个好主意。

从这里开始,只需启动PuTTY并选择telnet或SSH。 显然,您必须能够从Winblows框中看到WRAP。 如果您启用了TCP / IP,并且WRAP和Winblows框位于同一子网上(我使用192.168.0.0/24,WRAP为192.168.0.7,Winblows框为192.168.0.5,所有这些都是固定的IP地址, DHCP不使用),然后只需键入WRAP的IP地址,它应该工作。

exim4

使用“dpkg-reconfigure exim4-config”命令进行设置。

ntpdate

由于WRAP没有电池,每次重新启动时都会丢失时间设置。为了确保WRAP知道什么时间,假设您有一个“永远在线”的Internet连接,您只需安装ntpdate包即可。这将自动查询时间服务器并在启动时设置系统时钟。

NFS客户端

早期我需要从WRAP访问我的linux框的文件。 linux框运行NFS内核服务器版本2.要获取WRAP访问它,我做了以下:
apt-get install portmap
apt-get install nfs-common
在SERVER端,我设置了/ etc / exports文件,如下所示:
/home/livingston wrap(rw)
(wrap在/ etc / hosts中设置指向WRAP框)

在WRAP上,我做到了:
mount -o nfsvers=2,rw f216:/home/livingston /mnt
(f216是服务器。)有关更多详细信息,请参阅NFS-HOWTO。

整洁的WRAP技巧

要了解当前的系统温度:
cat /sys/bus/i2c/devices/0-0048/temp1_input
(将结果乘以1000得到摄氏度)。这是一个小的bash脚本,将提供更加用户友好的输出(需要“bc”,所以“apt-get install bc”首先):
#!/bin/sh
t=`cat /sys/bus/i2c/devices/0-0048/temp1_input`
t2=`echo scale=1\;$t/1000|bc -l`
echo "System temperature: "$t2" degrees Celsius"



赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏