真的是第一次使用开发板——相比于树莓派,开发版这种东西难用多了。
世上无难事,只要肯放弃
?
开发板说明
这个开发板是一个基于Arm的多媒体开发板,可以跑Linux,也可没有操作系统裸跑(叫做None-OS)。里面集成了常用的多媒体编码解码操作,例如JPEG解码啊啥的。
看说明,「开发板」这种东西好像需要「烧制」,也就是写好的东西不能直接像普通Linux软件那样直接跑,而是需要用烧录软件(例如,TorboWriter)将文件放到Memory的特定区域,然后板子才能加载文件跑起来。
仔细研究了一天,发现好像如果只跑比较「高层」的Linux软件的话,是不用进行烧制的。怎么理解呢?一个板子分为好几层,最下层是类似BIOS的东西,负责板子的自举和启动。启动之后,控制权交给第二层,再做一大堆东西。做完之后,控制权交给第三层,Linux操作系统,然后为所欲为。
前面两层是需要用专用的TorboWriter进行烧制的,但最后面的Linux操作系统层的烧制方法不同:我们写好的应用和Linux操作系统一起打一个特殊的包,命名为conprog.bin
。将板子通过USB连到电脑上,将此文件放到「nand1-1」这个盘里面即完成了「烧制」。
OK,这样一来我们的开发任务就可以简化一点了。
连接电脑
小纠结。但好像对微电子出身的同学们不是难事儿(意思是对于计算机出身的同学就完全丈二和尚了)。
这个板子上有几个接口:
- USB口:哦,顾名思义了。可用来烧写程序
- COM口:在没有屏幕的时代,这个口子就是计算机与板子沟通的桥梁
- JTAG口:用于调试硬件的
- 电源口:废话啦
下面是几个实验:
- 只插电源口:板子是「工作」状态,最正常不过了
- 只插USB口:板子等待烧录。应该是叫「恢复模式」。这时候,如果是NoneOS的话可以使用烧录软件(TurboWriter)进行烧录,如果是Linux的话会被识别成两个U盘,可以将固件拖拽进去
- 插电源口和COM口:板子正常工作,电脑使用COM口进行连接,相等于远程登录。里面开了一个BusyBox
- 插电源口和USB口:USB口优先,即进入「恢复模式」等待烧写固件
- JTAG口没试过
我们的目的是跑Linux,所以需要用COM口进行连接。
使用「公(板子上是公头,所以连接板子的线要用母头)对母(我的电脑上是母口)直连线(异性用直连,同性用交叉)」将板子和电脑相连,然后打开PuTTY,选择连接类型为Serial
,地址为/dev/ttyS0
,波特率为115200
,编码为UTF-8,点击连接。如果没有看到东西的话,可以按以下板子上的「Reset」键重启板子。
这时候,我们应该可以看到里面正在跑的BusyBox了。
如果不想使用PuTTY,那么可以使用神奇的Screen:screen /dev/ttyS0 115200
Linux开发环境搭建
系统
既然可以跑Linux,那么直接在Linux下面进行编写调试应该是最方便的。正好自己的系统是Debian9,不用专门为这个板子的开发而换系统。
我们的电脑是X86架构的,但是开发板是Arm架构的。在X86上面编译Arm的东西,需要「交叉编译」环境。我们首先需要安装一些依赖。
- 头文件
sudo apt install libncurses5-dev
- 不知道是干啥的,但不安的话下面
arm-linux-gcc
会报错(明明arm-linux-gcc
文件就在那儿,但是直接执行的话说找不到这个文件)sudo apt-get install lsb-core
- 继续,不知道干啥的,但不安的话
arm-linux-gcc
会报一些头文件找不到sudo apt-get install lib32stdc++6
- 继续一些其他奇奇怪怪的东西,用到了的话会补充在这里
工具链
传说中的ToolChain,名词听着好熟悉。
我们直接从新唐官网上下载下来ARM Linux GNU Tool Chain
即可。然后使用附带的安装脚本(arm_linux_4.2_install.sh
)一键安装。
这里需要注意,如果直接去网上搜索的话,也有一个叫做ARM Linux GNU Tool Chain
的东西。但是呢,前面一个好像是新唐自己定制的,后一个是“比较通用一点”的。我没有做详细的对比实验。建议直接用新唐提供的,等熟悉之后再研究后面那个。
板级支持包
Board Support Package(BSP),可以理解为一个经过定制的操作系统的最底层代码。
同样,官网下载(W55FA93BSP2.6.35_130611.tar.gz
),一键安装(w55fa93bsp_install.sh
)。
我们先来看一下BSP的整个目录结构。
linux-2.6.35.4
:Linux内核源代码Image
: 最后生成的conprog.bin
会出现在这里rootfs*
:Linux基本文件结构,将会被整体打包成conprog.bin
patch
:内核Patch,不知道怎么用applications
:一些Demo项目。我们可以照着这里面的东西写自己的Aplication
尝试编译Linux
人生第一次编译Linux内核……当然会出各种问题!当然,如果是按照上面步骤来走的,那么大部分问题其实都已经解决了。
- 进入
linux-2.6.35.4
文件夹,根据板子的不同,make出不同的配置文件。这个在手册(
N329 Series MCU Linux 2.6.35 BSP User's Manual
)里面有写。对于我拿到的板子,咒语是
make w55fa93_WQVGA_defconfig
我们还可以执行
make menuconfig
来配置内核参数如果我们不想自己生成配置文件,还可以用同文件夹下厂家设定好的配置文件(
N3290X_480x272.config
),将其改名为.config
即可使用 -
执行
./build
其实可以加上多线程的参数,
./build -j 8
,这样编译会快一点。由于我想使用NAND进行引导(这个东西是啥我也不知道),所以加上
nand
参数,变成./make nand -j 8
-
一般来说……一般来说是会报错的!会在
include/generated/timeconst.h
里面报一个错。解决方法是,将
kernel/timeconst.pl
中第 373 行的defined()
函数去掉,只留下@val
-
上面问题解决后,继续build。编译很快的。
- 在
../image
里面会生成我们需要的conprog.bin
文件。
将内核放入板子
激动人心的时刻!
- 板子上JP1跳线开路
- 不插5V电源
- USB连电脑,会出现
NAND1-1
和`NAND1-2“ - 将
conprog.bin
文件放入NAND1-1
内 - 断开USB,改用5V电源供电
卡在了Unable to enumerate USB device on port 1
,这个怎么解决
好像不用解决。其实BusyBox是跑起来了的。只是USB不能用和看着不爽而已。
NAND1-1内文件
movie.avi
:开机动画,好像即使没有内核,也能正常播放这个动画pointercal
:触摸屏校正文件,不要删除。删除之后开机会重新教准触摸屏boot_script
:好像和应用自动启动有关,可能是下文所说的「入口脚本」conprog.bin
:Linux内核、RootFS和一些我不知道的东西的打包
Linux启动过程
原厂给的脚本是将 linux 内核与文件系统编译到一个文件中
运行流程:
- 内核启动
- 执行文件系统中的
/etc/inittab
文件配置 shill 运行环境 - 运行
/etc/profile
文件 - 在 profile 文件中加载 NAND 芯片驱动
- 挂载两个 NAND 磁盘
- 运行一个 NAND1-1 磁盘上的入口脚本
boot_script
编译OpenCV
没有搞过交叉编译,所以以下东西可能不对
- 获取源代码包并解压缩
- 写一个配置文件
platforms/linux/arm-linux.toolchain.cmake
set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR arm) set(CMAKE_C_COMPILER arm-linux-gcc) set(CMAKE_CXX_COMPILER arm-linux-g++) set(WITH_TBB ON) set(SOFTFP ON) set(CMAKE_BUILD_TYPE RELEASE) set(INSTALL_C_EXAMPLES ON) set(BUILD_EXAMPLES ON) set(GCC_COMPILER_VERSION "" CACHE STRING "GCC Compiler version") set(GNU_MACHINE "arm-linux" CACHE STRING "GNU compiler triple") include("${CMAKE_CURRENT_LIST_DIR}/arm.toolchain.cmake") set(CMAKE_SYSTEM_VERSION 2.6)
- 创建Build文件夹并进入
mkdir build && cd build
- 使用CMake进行配置
cmake -D CMAKE_TOOLCHAIN_FILE=../platforms/linux/arm-linux.toolchain.cmake ../
- 开始编译
make all -j 8 make install
编译好了之后,将编译生成的所有文件覆盖到rootfs相应文件夹里,然后继续编译内核并打包、烧制。
然后华丽丽地花屏了——我也不知道怎么回事。
先暂告一段落。继续忙其他事儿去了。
发表回复