由于 Linux 操作系统内核具备可裁剪定制的特性,因而能够运行于 ARM 架构的嵌入式设备当中。伴随近几年,硬件性能的飞速提升以及价格的快速下降, Raspberry Pi
、 Nano Pi
、 Rock Pi
、 Orange Pi
等可运行完整桌面 Linux 操作系统的卡片电脑大量涌现,通用计算机与嵌入式系统之间的界限愈来愈模糊。各个 IC 厂家不断提升 MCU 性能的同时,也推出了相应的公版外围电路、通用操作系统、驱动程序支持等一揽子完善的嵌入式技术解决方案,与笔者七年以前接触嵌入式技术伊始,早已经不可同日而语。
笔者手上这款 Mini2440 开发板于 2013 年购置,是由广州友善电子科技有限公司于 2010 年推出的 ARM9 开发板,虽然板载的三星 S3C2440 嵌入式微处理器已然廉颇老矣,且对应的 Linux 2.6.32.2
内核版本也早已壮士暮年。但由于最近涉及 Linux 嵌入式操作系统相关的工作,因此重新上电使用,同时以怀旧心态执笔撰写本文,用于记录一些心得体会,同时也作为日后备忘。
Linux 2.6.32.2
,可提供 Yaffs2
、 Cramfs
、 EXT2
、 FAT32
、 NFS
文件系统支持。 arm-linux-gcc-4.4.3.tar.gz
Python
脚本编程支持,可以直接对硬件进行访问。 Qt/Embedded 4.8.5
支持。 核心资源:
400MHz
最高可达 533Mhz
; 64M
容量 32bit
位宽数据总线的 SDRAM ,时钟频率可达 100MHz
; 256M
的 Nand Flash , 以及用于安装 BIOS 的板载 2M
容量 Nor Flash ; 3.5
英寸 240x320
分辨率的 LCD 电阻触摸显示屏。 外围 IO 接口:
100M
以太网 RJ-45 接口。 10pin
的 JTAG 接口。 20 pin
针摄像头接口。 5V
供电的电源,并板载实时时钟电池。 34pin
的 GPIO 接口,以及 1 个 40pin
系统总线接口。 MAX811
实现微处理器所需的低电平复位。 通过串口连接到开发板进行调试,是嵌入式开发中较为基本的一项工作。由于现代计算机基本不再配置物理串口,因此需要通过专业芯片将 USB 转换为串口,目前市场上较为常见的 USB 转串口芯片有英国 FTDI Chip 飞特蒂亚 的 FT232
、台湾 Prolific 旺玖科技 的 PL2303
、江苏 沁恒 的 CH34X
,这里推荐使用板载 FT232
芯片的 USB 转串口线,从而获得高速稳定的通信质量,以及兼容性更加良好的驱动程序支持。更为重要的是,避免出现最新版本 Windows 10 操作系统中由于驱动程序签名错误,导致的 USB 转串口线无法正常工作的问题。
当 USB 转串口驱动程序安装成功之后,将线缆从电脑 USB 接口连接至开发板串口,然后首先了解一下串口通信相关的参数配置:
None
None
然后在电脑上启动 串口调试工具 ,Winodws 操作系统上可以选择功能强大的 MobaXterm ,Linux 环境下则可以选择使用小巧的 Minicom ,下面我们分别对两者的安装和使用进行总结:
点击主界面的【New session】,然后选择【Serial】串口模式,输入上面提到的串口通信配置数据:
点击确定保存配置,将 S2 开关 切换至【Nand Flash】启动模式,上电运行之后可以看到开发板 Bootloader 以及 Kernel 以及各种 Driver 加载的日志信息:
Superboot-2440 V1.5(20150414) by FriendlyARM
Booting from NAND
Load Kernel...
Uncompressing Linux...................................................................................................................................................... done, booting the kernel.
Linux version 2.6.32.2-FriendlyARM (root@tzs-ThinkPad-X201) (gcc version 4.4.3 (ctng-1.6.1) ) #16 Tue Dec 23 15:08:43 CST 2014
CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177
CPU: VIVT data cache, VIVT instruction cache
Machine: FriendlyARM Mini2440 development board
... ... ... ... ...
启动完成后便进入开发板的命令行界面,输入 Linux 命令查看开发板的一些基本信息:
Superboot-2440 V1.5(20150414) by FriendlyARM
Booting from NOR
Try to find SD card...... not found.
Hello USB Loop
USB Mode: Connected
早期 Mini2440 开发板出厂时预置的 Bootloader 是由友善之臂基于三星原厂 Vivi 改进而来的 Supervivi ,需要结合三星配套的 DNW 软件才能实现 USB 下载( 官方版本运行在 Win10 上时驱动已经失效 )。2014 年以后,友善之臂为 Mini2440 重新开发了一款称为 Superboot 的 Bootloader,并在同期推出 MiniTools 作为匹配的 USB 下载工具,该工具无需串口完全通过 USB 下载,并且内置相应的 USB 下载驱动,除了能够进行 Bootloader、Kernel、根文件系统的下载以外,还能够下载并安装 裸机程序 。由于 Superboot 必须与 MiniTools 配套使用,而笔者 Mini2440 开发板购置年限较早,因此需要手动通过 J-Link 仿真调试器将 Superboot 下载至开发板上的 2M 容量 Nor Flash ,下面来介绍 Bootloader 的具体烧写步骤:
首先在电脑上安装 JLink_Windows_V644d.exe
工具,然后将 Mini2440 开发板断电,并将 JLink
通过转接板和排线连接至开发板 JTAG
接口,另一头插入电脑 USB
接口。
Mini2440 开发板上电之后,在电脑上双击运行 J-Link Commander , 注意弹出的 JLINK 固件更新提示信息,为了防止 JLINK 固件失效这里选择【否】 ,运行后软件控制台界面输出如下信息表示 J-Link 已经成功连接至电脑:
SEGGER J-Link Commander V6.44d (Compiled Mar 27 2019 17:09:10)
DLL version V6.44d, compiled Mar 27 2019 17:08:23
Connecting to J-Link via USB...O.K.
Firmware: J-Link ARM V8 compiled May 27 2009 17:31:22
Hardware version: V8.00
S/N: -1
License(s): RDI,FlashDL,FlashBP,JFlash,GDBFULL
VTref=0.000V
Type "connect" to establish a target connection, '?' for help
开发板将 S2 开关切换至【Nor Flash】,并打开电源开关让开发板上电,接下来打开 J-Flash 并加载 s3c2440a_embedclub.jflash
配置文件,然后点击【Start J-Flash】进入软件主界面:
选择主界面菜单上的【Options】里的【Project settings…】,进入到项目配置界面后选择【Flash】选项卡。
点击【Select flash device】按钮,然后选中当前 Mini2440 开发板用于装载 Bootloader 的 Nor Flash 芯片型号。笔者当前 Mini2440 开发板使用的型号是 S29AL016J70TFI02
,实物照片如下图:
所以这里直接选择 S29AL016Jxxxxxxx2
并点击【OK】以及【确定】保存。
接下来,选择 J-Link Commander 菜单项【Target】下的【connect】命令,使 J-Link 连接至 Mini2440 开发板。
再选择菜单项【File】下的【Open data file…】选中开发板光盘 images
目录内的 Superboot2440.bin
映像文件( 注意这里仅支持 .bin
后缀名格式, 所以如果下载 supervivi-64M
就需要添加 .bin
作为后缀名 )。此时会弹出下载起始地址对话框,直接输入 0
以后点击【确定】即可:
进行到这一步时,所有的前期配置工作都已经完成,点击 J-Flash 菜单【Target】里的【Production Programming】开始烧写 Bootloader :
下面界面展示编程过程正在进行当中,万众期待的魔法即将发生:
当 J-Flash 界面弹出下图信息的时候,表示 Bootloader 已经成功的写入到 Mini2440 开发板的 Nor Flash 当中。
点击【确定】, J-Link 断电然后关闭 J-Flash ,开发板重新上电后开始正常工作。
完成【Superboot】的烧写之后,就可以通过 Mini2440 开发板上的 SD 卡插槽来完成操作系统的安装,首先将 SD 卡格式化为 FAT32 格式,然后将开发盘光盘中的 images
目录完全拷贝至 SD 卡,并修改好里面 FriendlyARM.ini
配置文件为当前开发板适用的选项,将 S2 开关 切换至【Nor Flash】一侧,重新上电后蜂鸣器发出一声 滴
即开始安装操作系统,完成安装之后蜂鸣器将会发出 滴滴
两声,此时将 S2 开关 切换至【Nand Flash】重新上电即可启动操作系统。
将友善电子提供的 Superboot 下载到开发板 Nor Flash 中之后,接下来着手 USB 下载工具 MiniTools 的安装,由于该软件内置的 USB 驱动程序未获得 Windows 10 操作系统驱动签名,因此直接在 Windows 10 环境下安装会提示错误信息。此时,需要通过手动临时关闭 Windows 10 操作系统的 驱动程序强制签名 验证服务。
点击 Windows 10 右下角通知图标,选择【所有设置】-【更新和安全】-【恢复】-【立即重新启动】;此时操作系统会讯问重启选项,选择【疑难解答】-【高级选项】-【启动设置】-【重启】;此时重新启动并进入启动设置选项,选择【7) 禁用驱动程序强制签名】;进行到这里,重新进入 Windows 10 操作系统后就可以正常安装 MiniTools 了。另外一种更新简单的方法是以管理员身份运行 CMD 命令提示符工具 ,然后执行 bcdedit.exe /set nointegritychecks off
命令就可以关闭强制签名验证,如果需要恢复验证执行 bcdedit.exe /set nointegritychecks on
即可。
接下来,在个人电脑上打开 MiniTools 软件,然后用数据线连接开发板的 USB Slave 和个人电脑上的标准 USB ,并将 S2 开关 拨至【Nor Flash】一侧,上电启动后就可以看到开发板成功与 MiniTools 建立连接:
Linux 版本 MiniTools 采用静态编译,基本能够兼容大部分发行版,解压后以 root
权限执行 ./start.sh
命令即可正常运行。
点击 MiniTools 界面上的【Linux】选项,并点击【Location images path】按钮,选择 Mini2440 开发板配套光盘下的 images
目录, MiniTools 会自动加载该目录下 FriendlyARM.ini
文件中的配置信息并自动填写至软件界面,注意配置文件中的 Linux-Kernel
项目需要设置为包含有对应液晶屏型号驱动的 Linux 内核,笔者当前开发板液晶屏型号为 X35
,因此将配置文件修改为 zImage_X35
,就像下面这样:
#This line cannot be removed. by FriendlyARM(www.arm9.net)
USBMode = No
Action = Install
OS = Linux
VerifyNandWrite = Yes
LowFormat = No
Status Type = Beeper| LED
# Linux part
Linux-BootLoader = Superboot2440.bin
Linux-Kernel = Linux/zImage_X35
Linux-CommandLine = noinitrd root=/dev/mtdblock3 init=/linuxrc cOnsole=ttySAC0
Linux-RootFs-InstallImage = Linux/rootfs_qtopia_qt4.img
# Windows CE 6 part
WindowsCE6-Bootloader = wince6/nboot_X35.bin
WindowsCE6-BootLogo = wince6/bootlogo.bmp
WindowsCE6-InstallImage = wince6/NK_X35.bin
#User Bin part
UserBin-Bootloader = Superboot2440.bin
UserBin-Image = 2440test/2440test_X35.bin
userBinStartAddress=30000000
点击【Start flashing】按钮即可开始通过 USB 下载相关的镜像文件。
使用 MiniTools 工具烧写操作系统时,需要确保 SD 卡里 images/FriendlyARM.ini
配置文件的 USB-Mode = yes
,或者使用前就先拨出 SD 卡。
友善电子提供了一系列无需运行在嵌入式操作系统之上的裸机测试程序,它们都保存在 2440test_X35.bin
这个文件下,需要通过 MiniTools 通过 USB 下载并运行在开发板上。
连接开发板的串口与 USB Salve 到计算机,并打开 MobaXterm 串口终端工具,将 S2 开关 切换至【Nor Flash】上电启动,打开 MiniTools 选择【User bin(No OS)】菜单,点击【Download and Run】按钮:
下载完成后, MobaXterm 串口终端将呈现如下提示信息,此时通过键入指定序号即可执行相应的裸机程序,按下键盘【Esc】键即可退出执行:
Superboot-2440 V1.5(20150414) by FriendlyARM
Booting from NOR
Try to find SD card...... not found.
Hello USB Loop
USB Mode: Connected
Downloading User-Bin...
Downloading User-Bin succeed
Run UserBin▒
Superboot-2440 V1.5(20150414) by FriendlyARM
Booting from NOR
<***********************************************>
SBC2440 Test Program VER1.0
www.arm9.net
Build time is: Jul 01 2012 13:05:28
Image$$RO$$Base = 0x30000000
Image$$RO$$Limit = 0x30034c4c
Image$$RW$$Base = 0x30034c4c
Image$$RW$$Limit = 0x300e2a10
Image$$ZI$$Base = 0x3009623c
Image$$ZI$$Limit = 0x300e2a10
<***********************************************>
Please select function :
0 : Please input 1-16 to select test
1 : Test PWM
2 : RTC time display
3 : Test ADC
4 : Test interrupt and key scan
5 : Test Touchpanel
6 : Test TFT-LCD or VGA1024x768 module
7 : Test IIC EEPROM, if use QQ2440, please remove the LCD
8 : UDA1341 play music
9 : Test SD Card
10 : Test CMOS Camera
11 : Test 1-wire LCD backlight control