4 执行启动

4.1 跳线与 DIP 开关设置

要使开发板从 microSD 卡启动,通常无需对跳线进行任何更改,但最好确认其设置与下图中第一张图片所示一致。

仅跳线 J15-J19 与系统启动相关。另外两个跳线分别与 LCD 背光和 HSMC 接口电压电平有关。

DIP 开关(位于开发板背面)通常需要按下方第二张图片所示进行设置。

开发板正面,跳线设置已高亮显示。

开发板背面,DIP 开关已高亮显示。除最右侧开关外,所有开关均向上推动。

4.2 连接外设

重要 的:
如果需要使用 USB 端口(例如连接鼠标和键盘),则在 Linux 执行启动时,必须将某个外设连接到 OTG USB 端口(即使 是一个未连接任何设备的 USB 集线器(hub)也可以)。这是 Linux 确定处理器与其连接设备之间角色所必需的,因为两者都可以作为 OTG 端口上的主机(host)。

应连接到开发板的一般用途硬件如下:

  • 将计算机显示器连接到模拟 VGA 接口。由于 Xillinux 通过模拟 VGA 插头产生符合 VESA 规范的 1024x768 @ 60Hz 信号, 因此几乎任何计算机显示器都可以满足要求。

  • 通过一根 USB 母头线缆(未包含在 SoCKit 硬件套件中)将鼠标和键盘连接到 USB OTG 接口。系统在没有这些设备的情况 下也能启动,并且在系统运行期间连接和断开键盘与鼠标也没有问题,前提是 Linux 执行启动序列时已连接了某个外设(或只是一个 USB 集 线器(hub))。 系统会检测并在任何时刻正常使用已连接的键盘和鼠标。

  • 以太网端口是可选配置,用于常见的网络任务。如果所连接的网络具有 DHCP 服务器,Linux 机器会自动配置网络。

  • UART USB 端口可选择连接到 PC,但在大多数情况下是多余的。一些启动信息会发送到该端口,并且启动完成后会在该接口上显示一个 shell 提示符(shell prompt)。

    当 PC 显示器或键盘缺失或无法正常工作时,此端口非常有用。

    注意:如果此端口连接到计算机,则必须在该计算机上运行某个终端软件。否则,Linux 在等待读取其启动信息时可能会停 止启动过程。保持此端口未连接状态下启动是正常的。

4.3 给开发板上电

本段描述上电时预期的现象。在以下描述中,观察开发板时,红色电源按钮位于左上角,八个 LED 位于底部,如前一页的图 片所示。

重要 的:
Xillinux 的根文件系统(root file system)永久驻留在 microSD 卡上,并在系统运行时进行写操作。因此,在关闭开发板电源之前,应像 任何 PC 计算机一样正确关闭 Linux 系统以保持系统稳定,尽管在突然断电时通常能够正确恢复。

将 microSD 卡插入 SoCKit 开发板,然后按下红色按钮启动电源。预期将出现以下序列:

  • 以下 LED 立即点亮:

    • 电源按钮旁边的绿色 LED

    • 开发板底部的全部八个 LED(发出微弱光)

    • LCD 屏幕的背光 LED(除非已安装跳线禁用此光)

    电源按钮稍右侧也会出现几次短暂的闪烁。这些是 UART LED。如果计算机连接到 UART USB 端口,它们将继续闪 烁。

  • 上电后不到一秒,最左边的四个 LED 熄灭,表示初始启动加载程序(bootloader)已初始化处理器。如果未发生此现象,可 能的原因包括 DIP 开关或跳线设置错误(见第 4.1 节),或者 microSD 卡未正确安 装、有故障或未正确加载 Xillinux 镜像。

  • 上电后约 14 秒,另外四个(最右边的)LED 也熄灭,并且最右边的 LED 开始以约 1 Hz 的频率闪烁。VGA 屏幕上会短暂显 示“Xillybus”屏幕保护程序(不到一秒),然后变成空白屏幕,左上角有两个 Linux 企鹅标志。如果未发生此现象,请检查 soc_system.rbf 文 件是否就位且未压缩(大小为 5-6 MB)。

  • 上电后约 26 秒,启动文本出现在 VGA 屏幕上。

  • 上电后不超过 35 秒,应出现登录提示符。系统自动以 root 用户登录,显示欢迎信息和 shell 提示符(shell prompt)。USB UART 链接上也会出现类似的 shell 提示符,主要用于故障排除。

如果最左边四个 LED 熄灭后没有任何反应,则很可能是 soc_system.rbf 文件存在问题。可以查看 UART 的输出以获取帮 助,如第 4.4 节所述。

可以通过以下链接观看展示开发板上电的短视频剪辑:

https://youtu.be/mTDaAn4lX3I。请注意,视频剪辑中 UART 的 LED 活动很少,因为那里没有连接 UART USB 端 口。

在 shell 提示符下输入“startx”以启动 Gnome 图形桌面。桌面初始化大约需要 15-30 秒。

注意事项:

  • root 用户的密码设置为空,因此如果需要以 root 身份登录,无需输入密码。

  • 从加载逻辑结构(logic fabric)开始到 Linux 内核启动期间,屏幕上会显示带有白色背景的 Xillybus 标志屏幕保护程序。当 操作系统将屏幕置于“空白”模式时(系统空闲时的正常状态,或 X-Windows 系统尝试操纵图形模式时),它也会显示。

  • 屏幕上出现蓝色背景的 Xillybus 屏幕保护程序,或随机蓝色条纹,表明图形接口遭遇数据 匮乏(data starvation)。除非已知明显原因,否则这种情况不应发生,一旦发生应予以报告。

4.4 启动期间的 UART 输出

如果启动过程失败,UART 的输出可能提供有关错误原因的提示。计算机上的终端应用程序应配置为 57600 波特、8 个数据 位、1 个停止位、无校验、无流控(“57600 8N1”)。

以下是典型输出:

U-Boot SPL 2012.10 (Dec 30 2013 - 18:03:34)
SDRAM: Initializing MMR registers
SDRAM: Calibrating PHY
SEQ.C: Preparing to start memory calibration
SEQ.C: CALIBRATION PASSED
DESIGNWARE SD/MMC: 0



U-Boot 2012.10 (Dec 30 2013 - 18:03:46)

CPU : Altera SOCFPGA Platform
BOARD : Altera SOCFPGA Cyclone 5 Board
DRAM: 1 GiB
MMC: DESIGNWARE SD/MMC: 0
*** Warning - bad CRC, using default environment

In: serial
Out: serial
Err: serial
Net: mii0
Warning: failed to set MAC address

最后一行倒计时几秒钟,然后自动继续读取三个文件。字节计数以及显示的内核版本可能会有所不同。

如果启动加载程序(bootloader)报告读取任何文件时出错,这很可能是启动失败的原因。“bad CRC”错误表明 U-boot 未能 找到已保存的环境变量集,因此使用默认值,这没有问题。

reading uImage

3328400 bytes read
reading socfpga.dtb

15576 bytes read
reading soc_system.rbf

7007184 bytes read
## Booting kernel from Legacy Image at 00007fc0 ...
 Image Name: Linux-3.8.0-xillinux-1.1
 Image Type: ARM Linux Kernel Image (uncompressed)
 Data Size: 3328336 Bytes = 3.2 MiB
 Load Address: 00008000
 Entry Point: 00008000
## Flattened Device Tree blob at 00000100
 Booting using the fdt blob at 0x00000100
 XIP Kernel Image ... OK
OK
 Loading Device Tree to 0fff8000, end 0fffecd7 ... OK

Starting kernel ...

此时,启动加载程序(bootloader)将控制权移交给 Linux 内核。下面仅给出了内核启动信息的开头部分。内核完成启动序 列后,将显示一个 shell 提示符。

如果“Starting kernel...”之后没有任何显示,请检查开发板上是否有一个蓝色 LED 在闪烁,这表明 FPGA 部分已成功加载。 未能加载 soc_system.rbf 文件是最可能的原因。

Booting Linux on physical CPU 0x0
Initializing cgroup subsys cpuset
Linux version 3.8.0-00116-gffe44a8 (eli@ocho.localdomain) (gcc version 4.6.3 (S3
CPU: ARMv7 Processor [413fc090] revision 0 (ARMv7), cr=10c5387d
CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
Machine: Altera SOCFPGA, model: Altera SOCFPGA Cyclone V
Memory policy: ECC disabled, Data cache writealloc
PERCPU: Embedded 8 pages/cpu @80e77000 s10880 r8192 d13696 u32768
Built 1 zonelists in Zone order, mobility grouping on. Total pages: 260096
Kernel command line: console=ttyS0,57600 root=/dev/mmcblk0p3 rw rootwait

4.5 首次启动后应尽快执行的操作

4.5.1 调整文件系统大小

根文件系统(root file system)镜像保持较小体积,以便尽快写入设备。另一方面,没有理由不利用 microSD 卡的全部容 量。

重要 的:
尝试调整文件系统大小时,存在擦除整个 microSD 卡内容的显著风险。因此,建议尽早执行此操作,因为发生这种意外 时,代价仅仅是重新初始化 microSD 卡(写入镜像和 soc_system.rbf)。

初始状态通常如下:

# df -h
Filesystem   Size Used Avail Use% Mounted on
/dev/root  2.3G 1.9G 304M 87% /
devtmpfs    505M 4.0K 505M 1% /dev
none       101M 736K 101M 1% /run
none       5.0M 0 5.0M 0% /run/lock
none       505M 0 505M 0% /run/shm

因此根文件系统为 2.3 GB,剩余 304 MB。

第一步是重新分区 microSD 卡。在 shell 提示符下,输入:

# fdisk /dev/mmcblk0

然后按如下方式输入(另见下面的会话记录):

  • d [ENTER] – 删除分区

  • 3 [ENTER] – 选择分区编号 3

  • n [ENTER] – 创建一个新分区

  • 按 [ENTER] 4 次以接受默认值:主分区,编号 3,起点为最低可能扇区,终点为最高可能扇区。

  • w [ENTER] – 保存并退出。

如果在操作过程中出现问题,只需按 CTRL-C(或 q [ENTER])退出 fdisk 而不保存更改。在最后一步之前,microSD 卡上 的任何内容都不会改变。

典型会话如下所示。注意扇区(sector)编号可能会有所不同。

root@localhost:~# fdisk /dev/mmcblk0

Command (m for help): d
Partition number (1-4): 3

Command (m for help): n
Partition type:
  p primary (2 primary, 0 extended, 2 free)
  e extended
Select (default p):
Using default response p
Partition number (1-4, default 3):
Using default value 3
First sector (112455-15523839, default 112455):
Using default value 112455
Last sector, +sectors or +size{K,M,G} (112455-15523839, default 15523839):
Using default value 15523839

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16:
      Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.

如果您的系统上显示的第一个扇区默认值不同于上述值,请选择您自己的系统默认值,而不是此处显示的值。

在此序列中,唯一可能需要偏离 fdisk 默认值的地方是最后一个扇区,用于创建比最大可能更小的文件系统。

正如底部的警告所示,Linux 无法更新分区表的视图,因为根分区正在使用中。因此需要重启:

# shutdown -h now

当 UART 控制台上出现消息“System halted.”(或 VGA 屏幕上的光标停止闪烁)后,关闭开发板电源并重新打开。系统应该 像以前一样启动,但如果重新分区过程中操作有误,则可能在任何阶段启动失败。

文件系统尚未调整大小;它只是获得了调整大小的空间。因此,在 shell 提示符下,输入:

# resize2fs /dev/mmcblk0p3

预期将得到以下响应:

resize2fs 1.42 (29-Nov-2011)
Filesystem at /dev/mmcblk0p3 is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/mmcblk0p3 is now 1926423 blocks long.

块计数取决于分区的大小,因此可能会有所不同。

正如工具所说,调整是在正在使用的文件系统上进行的。只要不中途断电,这就是安全的。

结果立即可见:无需重启。

使用 8 GB microSD 卡的典型会话:

# df -h
Filesystem   Size Used Avail Use% Mounted on
/dev/root  7.1G 1.9G 5.0G 28% /
devtmpfs    505M 4.0K 505M 1% /dev
none       101M 736K 101M 1% /run
none       5.0M 0 5.0M 0% /run/lock
none       505M 0 505M 0% /run/shm

注意:“df -h”工具给出的容量是按 1 GiB = 230 字节计算的,这比 1 Gigabyte(109 字节)大 7.3%。这就是为什么 8 GB 的卡在上面显示为 7.1 GiB。

4.5.2 允许远程 SSH 访问

要在开发板上安装 SSH 服务器,请将开发板连接到互联网,然后在 shell 提示符下输入:

# apt-get install ssh-server

请注意,默认情况下 root 密码为空,而 SSH 会正当地拒绝允许无密码登录。

要解决此问题,请在 shell 提示符下使用以下命令设置 root 密码:

# passwd

安装 SSH 服务器后,建议在 /etc/ssh/sshd_config 的底部添加以下行:

UseDNS no

这将关闭 SSH 服务器进行的相当无意义的反向 DNS 检查,该检查会在尝试启动会话时导致延迟。

4.6 使用桌面

Xillinux 桌面与任何 Ubuntu 桌面完全一样。由于 microSD 卡的数据带宽相对较低,应用程序加载会稍慢,但桌面本身响应相当灵 敏。

要在桌面环境中运行应用程序,请单击桌面左上角的 Ubuntu 图标(“Dash home”),然后输入所需应用程序的名称,例如输 入“terminal”打开 shell 提示符终端窗口,或输入“edit”打开 gedit 文本编辑器。

可以像任何 Ubuntu 发行版一样使用“apt-get”安装额外的软件包。

4.7 关机

要关闭系统,请单击桌面右上角的图标,然后单击“Shut Down...”。或者,在 shell 提示符下输入:

# shutdown -h now

当 UART 控制台上出现文本消息“System Halted”时,即可安全关闭开发板电源。另外,当 VGA 屏幕上的文本控制台光标停 止闪烁时,也表明 Linux 已关闭。

4.8 接下来做什么

现在,SoCKit 开发板已经成为一台运行 Linux 的通用计算机。通过 Xillybus IP 核与逻辑结构体(logic fabric)进行交互的基 本步骤可以在 在 Linux 主机上入门 Xillybus中找到。请注意,Xillinux 发行版中已安装了 Xillybus 驱动,因此可以跳过指南中有关安装的部分。

5.1 节涉及将特定于应用 程序的逻辑与 Linux 操作系统集成。

请注意,Xillinux 包含 gcc 编译器和 GNU make,因此可以直接在开发板的处理器上编译主机应用程序。也可以使用 apt-get 向发行版添加额外的软件包。