0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在Nitrogen8M SBC上运行VxWorks 7

冬至子 来源:北南南北 作者:gaitpu 2023-06-15 14:31 次阅读

为什么使用Nitrogen8M单板计算机

Boundary Devices公司推出的Nitrogen8M单板计算机是一个非常出色的开发板,我们已经在许多Linux驱动程序项目中使用它作为开发平台,它具有一个四核的NXP i.MX8M处理器,2 GB RAM以太网USB 3等。

我有一个同事最近正在参与一个VxWorks 7项目,项目是关于i.MX8M的客制化设计,这让我在想,在Nitrogen8M上运行VxWorks会有多容易呢?

NXP i.MX8M上跑VxWorks 7

自90年代初以来,我们一直在编写VxWorks板级支持包(BSP)和驱动程序,所以我知道我们是有可能让VxWorks 7跑在NXP i.MX8M上的。VxWorks 7的创新之一是为各种片上系统(SoC)设备引入了平台(处理器)支持层,从而使向新板子的移植工作变得更加容易。通过将板子具体的硬件配置从BSP中移出并移进设备树中,可以帮助简化移植工作。

由于大多数外围设备都集成到处理器中,因此除了配置一个设备树以运行基本内核外,几乎没有其他事情可做了。当然,最魔幻的在于细节部分。绝大多数的定制化板子都是为特定市场上的某一个工作而设计的,因此使内核运行通常只是任何项目的开始而已。

VxWorks 7支持NXP i.MX8M SoC以及许多NXP的评估板,这是我的起点。我为Nitrogen8M单板创建了一个简单的设备树,并在现有的i.MX8M板级文件中添加了一些基本的板子具体的定义。然后,我编译了一个内核映像,生成了一个带有集成设备树的U-Boot兼容的ELF文件。

加载内核

现在,使用U-Boot tftpboot命令将VxWorks映像加载到板子上:

= > tftp 43000000 uVxWorks 
Using FEC device 
TFTP from server 192.168.10.20; our IP address is 192.168.10.10 
Filename 'uVxWorks'. 
Load address: 0x43000000 

Loading: #################################################################
         #################################################################
         #################################################################
         #################################################################
         ########################################
         7 MiB/s
done 
Bytes transferred = 4395496 (4311e8 hex)

下面使用bootm命令来运行它,由于设备树已集成到VxWorks内核映像中,因此我只需要指定加载地址:

= > bootm 43000000
## Booting kernel from Legacy Image at 43000000 ...
   Image Name: vxworks
   Image Type: AArch64 VxWorks Kernel Image (uncompressed)
   Data Size: 4395432 Bytes = 4.2 MiB
   Load Address: 40100000
   Entry Point: 40100000
   Verifying Checksum ... OK
   Loading Kernel Image ... OK
## Starting vxWorks at 0x40100000, device tree at 0x00000000 ...
Target Name: vxTarget
 _________            _________ 
 \\77777777\\          /77777777/ 
  \\77777777\\        /77777777/ 
   \\77777777\\      /77777777/ 
    \\77777777\\    /77777777/ 
     \\77777777\\   \\7777777/ 
      \\77777777\\   \\77777/              VxWorks 7 SMP 64-bit 
       \\77777777\\   \\777/ 
        \\77777777\\   \\7/     Core Kernel version: 3.1.1.0 
         \\77777777\\   -      Build date: Apr 29 2020 10:55:31 
          \\77777777\\ 
           \\7777777/         Copyright Wind River Systems, Inc. 
            \\77777/   -                 1984-2020 
             \\777/   /7\\ 
              \\7/   /777\\ 
               -   ------- 

                   Board: Boundary Devices Nitrogen8M SBC - ARMv8 
               CPU Count: 4 
          OS Memory Size: 2048MB 
        ED&R Policy Mode: Deployed
 Adding 9129 symbols for standalone.

- >

以上都很简单,只花了几个小时。但是,我们现在有的只是内核和以太网的支持,这只是一个开始,还不足以支持复杂的应用程序。

增加USB 3的支持

增加USB 3支持会如何呢?USB主机控制器已集成到处理器中,原则上也应该很容易,只需将正确的驱动程序添加到内核配置并更新设备树即可。

我插入了一个U盘,期望能检测到它并列出其中的内容,结果什么动静也没有!我检查了驱动程序和内核配置,看起来都没问题,那出问题的地方可能是哪儿呢?

我把USB的调试信息打开,并重新编译了VxWorks内核,重新启动运行带有调试功能的内核,当我插入U盘的时候,USB主机控制器没有识别到任何的设备插入事件,这是确定无疑的了。

看来是时候要更仔细研究一下硬件了!

Nitrogen8M上的USB 3主机控制器

Nitrogen8M有两个USB 3主机控制器,一个连接到了USB 3的Mini Type B的连接器,用于OTG连接。另一个连接到板载USB 3 hub(Renesas uPD720210),其提供了三个板载的USB端口

幸运的是,Boundary Devices公司提供了板子的原理图,这很有趣:

图片

Nitrogen 8M on-board USB3 hub

Hub有一个复位引脚,器件的数据手册说这是一个低电平有效的复位信号,我的猜测是Hub被一直置于复位状态,因此我需要将该信号驱动为高电平才能使其退出复位状态。

复位信号是从哪儿来的呢?再看一下板子的原理图:

图片

GPIO pin driving USB hub reset

一点也不奇怪,该复位信号确实来自处理器的一个GPIO引脚。幸运的是,VxWorks 7对i.MX8M平台的支持包含了一个GPIO的驱动程序,我将此驱动程序添加到了内核的配置中,然后,我在Nitrogen8M设备树中添加了一个引脚配置,以在启动过程中将GPIO1的引脚14设置为高电平。

完整的设备树如下所示:

/* nitrogen8m.dts - Boundary Devices Nitrogen8M SBC device tree source */
/*
modification history
--------------------
29apr20,jge created
*/
/dts-v1/;
#include "prjParams.h"
#include "imx8mq.dtsi"
#include "imx8mq-clocks.dtsi"
#include "imx8mq-iomux.dtsi"
/ {
 model = "Boundary Devices Nitrogen8M SBC - ARMv8";
 aliases
 {
 ethernet0 = &enet0;
 serial0 = &uart1;
 };
 memory
 {
 device_type = "memory";
 reg = < 0x0 0x40000000 0x0 0x80000000 >;
 };
 /*
 * U-Boot only fixes up bootargs if  environment variable is set
 * when VxWorks kernel is configured in independent DTB mode.
 */
 chosen
 {
 bootargs = "enet(0,0)host:vxWorks h=192.168.10.20 e=192.168.10.10:ffffff00
g=192.168.10.1 u=target pw=vxTarget";
 stdout-path = "serial0";
 };
 };
&enet0
 {
 phy0: ethernet-phy@0
 {
 compatible = "atheros,ar8035";
 reg = < 0 >;
 };
 };
&iomux
 {
 iomux_usb2: iomux_usb2
 {
 pin-set = <
 0x060 0x2C8 0x000 0x0 0x0 0x16
 >;
 };
};
&gpio1
 {
 status = "okay";
 pinmux-0 = < &iomux_usb2 >;
 usb_hub_resetb
 {
 gpio-hog;
 gpios = < 14 >;
 output-high;
 };
 };

重新编译内核并再次引导后,我们可以看到以下信息:

## Starting vxWorks at 0x40100000, device tree at 0x00000000 ...
Target Name: vxTarget
_________            _________
\\77777777\\          /77777777/
 \\77777777\\        /77777777/
  \\77777777\\      /77777777/
   \\77777777\\    /77777777/
    \\77777777\\   \\7777777/
     \\77777777\\   \\77777/              VxWorks 7 SMP 64-bit
      \\77777777\\   \\777/
       \\77777777\\   \\7/     Core Kernel version: 3.1.1.0
        \\77777777\\   -      Build date: May 1 2020 13:59:07
         \\77777777\\
          \\7777777/         Copyright Wind River Systems, Inc.
           \\77777/   -                 1984-2020
            \\777/   /7\\
             \\7/   /777\\
              -   -------

                  Board: Boundary Devices Nitrogen8M SBC - ARMv8
              CPU Count: 4
         OS Memory Size: 1984MB
       ED&R Policy Mode: Deployed

 Adding 10204 symbols for standalone.

- >

板子启动后,我看到USB存储设备中的LED灯在闪烁,在shell下使用devs显示内核设备列表也确认了这一点,该列表显示了USB设备上存在两个已挂载的文件系统分区。

- > devs
drv refs name
  1 [ 3] /
  2 [ 3] /bd0:1 == > /bd0a
  2 [ 3] /bd0:2 == > /bd0b
  5 [ 3] /bd0a
  6 [ 3] /bd0b
 10 [ 3] /input/event
  0 [ 3] /null
  3 [ 3] /ttyS0
  2 [ 3] /tyCo/0 == > /ttyS0
 12 [ 3] host:
value = -140737484449152 = 0xffff8000003b9a80
- >
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    18275

    浏览量

    222164
  • 以太网
    +关注

    关注

    40

    文章

    5076

    浏览量

    166238
  • USB控制器
    +关注

    关注

    1

    文章

    34

    浏览量

    11791
  • Linux系统
    +关注

    关注

    4

    文章

    567

    浏览量

    26914
  • 片上系统
    +关注

    关注

    0

    文章

    159

    浏览量

    26396
收藏 人收藏

    评论

    相关推荐

    关于vxworks5.5.1龙芯2F和ATI M9的writeback test failed的高端问题

    各位资深人士,小弟vxworks5.5.1的ATI显卡显示驱动,就是linux找到源码调,现在其他的已经差不多了,但是跑3D的时候
    发表于 11-18 09:56

    关于vxworks5.5.1龙芯2F和ATI M9的writeback test failed的高端问题

    各位资深人士,小弟vxworks5.5.1的ATI显卡显示驱动,就是linux找到源码调,现在其他的已经差不多了,但是跑3D的时候
    发表于 11-18 09:59

    基于Windows平台的VxWorks交叉编译工具该怎么设计?

    交叉编译技术,就是一种一个异构平台上编译出目标平台程序的技术。比如在PC平台(X86 CPU)编译出能运行在以VxWorks为内核的CPU平台上的程序,编译得到的程序
    发表于 11-01 06:20

    VxWorks映象的分类

    的上层应用程序显得不是很方便。2、 基于ROM的VxWorks映象这是一种运行于RAM中,但起初存放于ROM中的VxWorks映象。即该映象需要和搬移程序一起固化BOOT中。目标板
    发表于 08-25 11:20

    vxworks smp

    使用OpenGL ES2.0的图形程序vxworks smp下运行时如何解决CPU占用率过高现象?(版本是vxworks 6.9,使用的是风河workbench 3.3自带的ARMA
    发表于 11-06 22:13

    请问一下GD32F350芯片是怎样8M运行

    请问一下GD32F350芯片是怎样8M运行的?有哪些流程?
    发表于 11-01 06:44

    如何同时cortex A53运行Linux和在cortex M7运行FreeRTOS?

    对于机器人项目,我需要同时 cortex A53 运行 Linux 和在 cortex M7 运行
    发表于 03-21 08:29

    imx8mp运行M7声卡时出现问题如何解决?

    开发板运行M7程序参考IMX_LINUX_USERS_GUIDE.pdf。内核版本 Linux imx8mpevk 5.15.32-l
    发表于 03-28 06:10

    为什么无法s32k144中按每帧8位配置SBC

    您好,我目前 SDK 中使用“sbc_uja116x_s32k144”示例。当我将 .bitcount 从 16 更改为 8 时,SBC 驱动程序初始化将返回错误并进入 DEV_AS
    发表于 04-19 08:15

    sbc_uja116x_s32k144演示项目LPSPI SBC_DataTransfer错误如何解决?

    嗨社区,我通过使用示例中的 S32DS 项目尝试了 sbc_uja116x_s32k144。当我运行程序时,程序停在文件 sbc_uja116x_driver 中的 SBC
    发表于 04-20 06:49

    S32G M7_0和M7_1内核独立/并行运行M7_1 (VM1) 未正常运行怎么解决?

    我的系统中存在 2 个虚拟机, VM0 用于 Core0 (M7_0), VM1 用于 Core1(
    发表于 05-04 07:21

    如何使LLCE_CANM7上工作以进行多重引导 (M7/A53)?

    LLCE_CAN loopback example。 如果 A53 正在启动进入操作系统,M7 将意外停止。 这是我的问题: M7 正常运行需要检查哪些配置? 有没有可能让LLCE_CAN控制器0-
    发表于 06-08 09:03

    如何使用ARM Development Studio调试MCIMX8M-EVK板运行的简单程序

    本教程中,您将学习如何使用ARM Development Studio调试MCIMX8M-EVK板运行的简单程序。 通过完成一系列基本
    发表于 08-28 06:20

    nitrogen基于vue的纯前端mac版桌面

    gitee-nitrogen.zip
    发表于 04-18 11:43 0次下载
    <b class='flag-5'>nitrogen</b>基于vue的纯前端mac版桌面

    贸泽开售加快工业IoT设备开发的 Boundary Devices Nitrogen8M Plus SMARC

    Nitrogen8M Plus SMARC。Nitrogren8M Plus SMARC是一款符合SMARC 2.1行业标准的高性能系统级模块 (SoM),与SMARC载板相结合可组成单板计算机,大大加快产品上市
    发表于 03-15 17:23 146次阅读