Skip to main content

Linux 开发板调试典型方法

Li Zheng flyskywhy@gmail.com

安装开发环境

tftpd

sudo apt-get install tftpd openbsd-inetd

/etc/inetd.conf 文件中的最后一个路径设置成你希望让客户端存取文件的目录,例如下面的 /tftp (记得开放该目录的读写权限):

tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /tftp

然后用如下语句重启 tftpd 服务:

/etc/init.d/openbsd-inetd restart

备注:可以使用 tftp localhost 进行 put 或 get 文件来测试 tftpd 是否运行正常。

nfs-kernel-server

sudo apt-get install nfs-kernel-server

/etc/exports 文件中添加一个路径,使之成为你希望让客户端挂载其中某个目录的目录,例如下面的语句:

/nfs *(rw,insecure,sync,no_wdelay,no_subtree_check,insecure_locks,no_root_squash)

然后用如下语句重启 nfs-kernel-server 服务:

/etc/init.d/nfs-kernel-server restart

备注:可以使用例如 sudo mkdir /mnt/nfs ; sudo mount -t nfs 192.0.16.37:/nfs /mnt/nfs 来测试 nfs-kernel-server 是否运行正常,测试完成后 sudo umount /mnt/nfs

串口调试软件

这里以命令行软件 minicom 为例,当然也可以使用图形化软件 gtkterm 或 putty ,看个人喜好。

使用 minicom -s 配置或者直接在 /etc/minirc.dfl 中添加如下内容:

# 机器生成的文件 - 使用 "minicom -s" 改变参数.
pu port /dev/ttyS0
pu rtscts No

注:如果用的是 USB 转串口设备,则用 ttyUSB0 替代 ttyS0 。

调试开发板

这里分别以 ARM 和 MIPS 开发板举例。

ARM

这里以 天嵌 IMX6 开发板通过 NFS 运行 Linux 为例。

Bootload

在终端启动 minicom ,上电开发板,开发板将会通过串口在 minicom 中打印 bootload 信息。

开发板上电后 1 秒内迅速在 minicom 中按下回车键进入 ARM 的 bootload 即 uboot 命令行界面(否则它会自动启动闪存中的 Android 系统),输入 ? 符号会打印出天嵌整理在 uboot 中可用的命令,输入如下命令让连接着路由器的开发板的网口自动获取IP地址:

dhcp

它获得 IP 地址后就会自动尝试通过 tftp 启动,此时当然会报错,所以 CTRL+C 即可,因为我们这里只是用它来获得 IP 地址而已。

Linux 内核

然后输入如下命令将主机上的 tftpd 目录(比如 192.0.16.37 上的 /tftp 目录)中来自于 天嵌 E9v3 卡片电脑下载资料Linux 4.1镜像 里的 Linux 内核文件 zImageARM 设备树 文件 imx6q-sabresd.dtb 下载到开发板中:

    tftpboot 192.168.0.16.37:zImage
tftpboot ${fdt_addr} 192.168.11.105:imx6q-sabresd.dtb

这里 ${fdt_addr} 不用关心,这是 uboot 中已经设好的环境变量(可以通过 env print 命令查看)。

如果 tftpboot 下载 zImage 时总是失败然后自动重试,则需要多试几次进入 uboot 后 5 秒左右运行下载命令,或是将开发板断电 4 分钟然后再上电,估计这是该开发板的一个 BUG 。

Linux 根文件系统

最后输入如下命令挂载主机上的 nfs 中的某个目录(比如 192.0.16.37 上的 /nfs/rootfs_qt5 目录)作为根文件系统并启动 Linux (下面的 192.0.16.87 是开发板之前在 Bootload 步骤中获得的 IP 地址):

    setenv bootargs console=ttySAC0,115200 ip=192.0.16.87:192.0.16.37:192.0.16.1:255.255.255.0 init=/init root=/dev/nfs rootwait rw nfsroot=192.0.16.37:/nfs/rootfs_qt5,v3,tcp video=mxcfb0:dev=hdmi,1280x720@60,if=RGB24,bpp=32 video=mxcfb1:off video=mxcfb2:off video=mxcfb3:off vmalloc=400M androidboot.console=ttySAC0 androidboot.hardware=freescale cma=384M
bootz ${loadaddr} - ${fdt_addr}

这里 bootz 的参数特别是 - 符号的意义可参见 ? bootz 命令的输出。

天嵌开发板其它

新购开发板默认用 VGA 启动 Android ,如果想让它默认使用 HDMI ,可在 uboot 中使用 menu 命令打开菜单,然后 setting boot args | setting display args | mxfb0 display args | hdmi 保存退出重启即可。

MIPS

这里以 Sigma smp86xx 开发板通过 NFS 运行 Android 为例。

Bootload

在终端启动 minicom ,上电开发板,开发板将会通过串口在 minicom 中打印 bootload 信息。

在 MIPS 的 bootload 即 YAMON 启动后的界面中输入如下命令让连接着路由器的开发板的网口自动获取IP地址:

net init

Linux 内核

然后输入如下命令将主机上的 tftpd 目录(比如 192.0.16.37 上的 /tftp 目录)中的 Linux 内核文件 vmlinux.bin 下载到开发板中:

load -b tftp://192.0.16.37/vmlinux.bin 0x84000000

Android 根文件系统

最后输入如下命令挂载主机上的 nfs 中的某个目录(比如 192.0.16.37 上的 /nfs/Sigma_rfs 目录)作为根文件系统并启动 Linux (下面的 192.0.16.87 是开发板之前在 Bootload 步骤中获得的 IP 地址):

go . root=/dev/nfs nfsroot=192.0.16.37:/nfs/Sigma_rfs ip=192.0.16.87:192.0.16.37::::eth0:none: rdinit=/none init=/init console=ttyS0 mem=192M androidboot.hardware=smp86xx