嵌入式 Linux 开发 2:评估开发板
为什么要评估开发板
制作 Linux 硬件是一件代价很大且风险很高的事情,为了快速检验可行性,一般会先评估 Linux 开发板。
开发板让 Linux 软件工程师尽快投入开发,也给硬件工程师提供参考设计,确实是个不错的工具。
向厂商申请哪些资源
除了 Linux 开发板硬件外,一般还需要如下的资源
- Linux 核心板和开发板说明书
- 硬件设计资料:原理图,PCB 封装,BOM 清单
- Linux 4 组件及源代码:开发工具链,u-boot,内核,根文件系统
盘点开发板资源
首先将 USB2TTL 连接 PC 和 开发板,接上网线,然后启动 Linux 系统,查看如下资源
- CPU
cat /proc/cpuinfo
- RAM
free
- FLASH
cat /proc/mtd
df -h
- 以太网
ifconfig
- 内核版本
cat /proc/version
- 文件系统
cat /proc/filesystems
mount
- 设备
cat /proc/devices
小窍门:一般 Linux 开发板都可以串口登录,常见波特率为 115200/57600-8-n-1 可使用如下软件和 Linux 命令
TeraTerminal串口软件
提高 Linux 服务器性能
测试工具链/u-boot/内核/根文件系统
拿开发板厂商提供的工具,按文档快速完成如下 5 步,评估 Linux 软硬件可行性。
- 安装交叉编译工具链
- 编译 u-boot(可选:烧录并测试 u-boot)
- 联编内核
- 编译一个小型应用程序,并添加到根文件系统中
- 用新构建的根文件系统和内核启动开发板,调试应用程序
小窍门1:小心烧录 u-boot 的危险性! 这依赖 CPU 的启动方式:
- 如果 CPU 支持 USB ISP 启动,烧录 u-boot 很容易,出错也容易恢复--再来一次。
- 否则,如果升级 u-boot 时破坏了【正常工作的 u-boot】那就只能依靠 JTAG 仿真器来烧录了,这引入了不必要的麻烦。
小窍门2:每一种 CPU 都有自己独特的【编译和烧录】方式,尽早尝试,既可以熟悉流程,还能判断该 CPU 是否适合产品需求。
测试开发板硬件
测试 SPI
- 联编 SPI 到内核:在 Device Drivers--->SPI support 选中 SPI 总线,选中 User mode SPI device driver support
- 查看 SPI 设备文件:
ls -l /dev/spidev1.0
- 从原理图查找并短接 SPI 的 2 引脚 MOSI 和 MISO
- 交叉编译 spidev_test.c 测试代码并上传到开发板(使用 NFS / SD / USB 等方式)
- 执行
./spidev_test -D /dev/spidev1.0
看到下面的语句即 OK
spi mode: 0x0
bits per word: 8
max speed: 500000 Hz (500 KHz)
RX | FF FF FF FF FF FF 40 00 00 00 00 95 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D
小窍门:如果将 MISO 短接到 3.3V 将会显示 32 个 FF 如果将 MISO 短接到 GND 将会显示 32 个 00
测试 UART
- 联编 UART 到内核:在 Device Drivers--->Character devices--->Serial drivers 选中 UART 总线
- 查看 SPI 设备文件:
ls -l /dev/ttyS*
- 从原理图查找 UART 的 2 引脚 RxD 和 TxD 连同 GND 连接到 USB2TTL<-->PC 打开【串口调试助手】,配置 9600-8n1
- 修改 程序清单4 串口示例1代码 DEV_NAME 交叉编译并上传到开发板(使用 NFS / SD / USB 等方式)
- 执行
./uart_demo
在【串口调试助手】看到 "hello world" ---> 发送正常 - 在【串口调试助手】发送 68 65 6C 6C 6F 20 77 6F 72 6C 64 0D 在 shell 看到 "hello world" ---> 接收正常
测试 GPIO
- 联编 GPIO 到内核:在 Device Drivers--->GPIO Support 选中 /sys/class/gpio/...(sysfs interface)
- 从原理图查找 GPIO 引脚(优先连接 LED 的 GPIO 方便测试,其次使用【万用表】连接 GPIO 和 GND 测量电压)
- 修改 GPIO 引脚号并执行下面
toggle_gpio.sh
脚本 ---> 测试 GPIO 每 3 秒翻转电平
#!/bin/sh
GPIO=33
echo $GPIO > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio${GPIO}/direction
while true
do
echo 1 > /sys/class/gpio/gpio${GPIO}/value
sleep 3
echo 0 > /sys/class/gpio/gpio${GPIO}/value
sleep 3
done
有必要做一个样机吗
基于 Linux 开发板做样机是一件正确的事,它能用极低的代价“深入”检验产品的可行性。
一旦样机能跑起来,团队能将抽象的概念具体化,能聚焦精力,并且团队可以操作实物。
小心:样机不是真正的产品,它只能检验核心功能,切勿在它上面追求完美!