新唐N3290X开发板使用手记


发布于

|

分类

真的是第一次使用开发板——相比于树莓派,开发版这种东西难用多了。

世上无难事,只要肯放弃

?

开发板说明

这个开发板是一个基于Arm的多媒体开发板,可以跑Linux,也可没有操作系统裸跑(叫做None-OS)。里面集成了常用的多媒体编码解码操作,例如JPEG解码啊啥的。

看说明,「开发板」这种东西好像需要「烧制」,也就是写好的东西不能直接像普通Linux软件那样直接跑,而是需要用烧录软件(例如,TorboWriter)将文件放到Memory的特定区域,然后板子才能加载文件跑起来。

仔细研究了一天,发现好像如果只跑比较「高层」的Linux软件的话,是不用进行烧制的。怎么理解呢?一个板子分为好几层,最下层是类似BIOS的东西,负责板子的自举和启动。启动之后,控制权交给第二层,再做一大堆东西。做完之后,控制权交给第三层,Linux操作系统,然后为所欲为。

前面两层是需要用专用的TorboWriter进行烧制的,但最后面的Linux操作系统层的烧制方法不同:我们写好的应用和Linux操作系统一起打一个特殊的包,命名为conprog.bin。将板子通过USB连到电脑上,将此文件放到「nand1-1」这个盘里面即完成了「烧制」。

OK,这样一来我们的开发任务就可以简化一点了。

连接电脑

小纠结。但好像对微电子出身的同学们不是难事儿(意思是对于计算机出身的同学就完全丈二和尚了)。

这个板子上有几个接口:

  • USB口:哦,顾名思义了。可用来烧写程序
  • COM口:在没有屏幕的时代,这个口子就是计算机与板子沟通的桥梁
  • JTAG口:用于调试硬件的
  • 电源口:废话啦

下面是几个实验:

  1. 只插电源口:板子是「工作」状态,最正常不过了
  2. 只插USB口:板子等待烧录。应该是叫「恢复模式」。这时候,如果是NoneOS的话可以使用烧录软件(TurboWriter)进行烧录,如果是Linux的话会被识别成两个U盘,可以将固件拖拽进去
  3. 插电源口和COM口:板子正常工作,电脑使用COM口进行连接,相等于远程登录。里面开了一个BusyBox
  4. 插电源口和USB口:USB口优先,即进入「恢复模式」等待烧写固件
  5. 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的东西,需要「交叉编译」环境。我们首先需要安装一些依赖。

  1. 头文件
          sudo apt install libncurses5-dev 
    
  2. 不知道是干啥的,但不安的话下面arm-linux-gcc会报错(明明arm-linux-gcc文件就在那儿,但是直接执行的话说找不到这个文件)
          sudo apt-get install lsb-core
    
  3. 继续,不知道干啥的,但不安的话arm-linux-gcc会报一些头文件找不到
          sudo apt-get install lib32stdc++6
    
  4. 继续一些其他奇奇怪怪的东西,用到了的话会补充在这里

工具链

传说中的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内核……当然会出各种问题!当然,如果是按照上面步骤来走的,那么大部分问题其实都已经解决了。

  1. 进入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即可使用

  2. 执行./build

    其实可以加上多线程的参数,./build -j 8 ,这样编译会快一点。

    由于我想使用NAND进行引导(这个东西是啥我也不知道),所以加上nand参数,变成./make nand -j 8

  3. 一般来说……一般来说是会报错的!会在include/generated/timeconst.h里面报一个错。

    解决方法是,将 kernel/timeconst.pl 中第 373 行的 defined() 函数去掉,只留下 @val

  4. 上面问题解决后,继续build。编译很快的。

  5. ../image里面会生成我们需要的conprog.bin文件。

将内核放入板子

激动人心的时刻!

  1. 板子上JP1跳线开路
  2. 不插5V电源
  3. USB连电脑,会出现NAND1-1和`NAND1-2“
  4. conprog.bin文件放入NAND1-1
  5. 断开USB,改用5V电源供电

卡在了Unable to enumerate USB device on port 1,这个怎么解决

好像不用解决。其实BusyBox是跑起来了的。只是USB不能用和看着不爽而已。

NAND1-1内文件

  1. movie.avi:开机动画,好像即使没有内核,也能正常播放这个动画
  2. pointercal:触摸屏校正文件,不要删除。删除之后开机会重新教准触摸屏
  3. boot_script:好像和应用自动启动有关,可能是下文所说的「入口脚本」
  4. conprog.bin:Linux内核、RootFS和一些我不知道的东西的打包

Linux启动过程

原厂给的脚本是将 linux 内核与文件系统编译到一个文件中

运行流程:

  1. 内核启动
  2. 执行文件系统中的 /etc/inittab 文件配置 shill 运行环境
  3. 运行 /etc/profile 文件
  4. 在 profile 文件中加载 NAND 芯片驱动
  5. 挂载两个 NAND 磁盘
  6. 运行一个 NAND1-1 磁盘上的入口脚本boot_script

编译OpenCV

没有搞过交叉编译,所以以下东西可能不对

  1. 获取源代码包并解压缩
  2. 写一个配置文件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)
    
  3. 创建Build文件夹并进入
      mkdir build && cd build
    
  4. 使用CMake进行配置
      cmake -D CMAKE_TOOLCHAIN_FILE=../platforms/linux/arm-linux.toolchain.cmake ../
    
  5. 开始编译
          make all -j 8
          make install
    

编译好了之后,将编译生成的所有文件覆盖到rootfs相应文件夹里,然后继续编译内核并打包、烧制。

然后华丽丽地花屏了——我也不知道怎么回事。

先暂告一段落。继续忙其他事儿去了。


评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注