为什么使用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/sdone 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 = ; }; /* * 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:ffffff00g=192.168.10.1 u=target pw=vxtarget; stdout-path = serial0; }; };&enet0 { phy0: ethernet-phy@0 { compatible = atheros,ar8035; reg = ; }; };&iomux { iomux_usb2: iomux_usb2 { pin-set = ; };};&gpio1 { status = okay; pinmux-0 = ; usb_hub_resetb { gpio-hog; gpios = ; 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设备上存在两个已挂载的文件系统分区。
- > devsdrv 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- >
美6岁男孩带宠物狗走失 大疆无人机经纬M210 V2和热成像技术成就深夜营救
带空气层的宽带微带天线的分析与设计
简析电子战、电磁域和空中优势
什么是Socket连接?与TCP连接有什么关系?
单级高功率因数调光式荧光灯电子镇流器设计
在Nitrogen8M SBC上运行VxWorks 7
TDA8943SF各引脚功能及电压
一种新型拉曼分布式光纤温度传感技术
FAENZA法恩莎得到了广泛认可,以艺术之名营造生活
北京安防展即将举行,物联网促“泛安防时代”的来临
宝马100亿动力电池生产基地落地沈阳
红外遥控双模式交通灯控制系统课程设计
AR/VR市场苏醒:2018全球将有178亿美元支出消费 商业领域极速增长
DCM下峰值电流控制的变换器建模
贴片Y电容逐渐替代插件Y电容
山特防雷防浪涌插座抢“鲜”登场
电泳式电子纸显示技术的量产化应用
无线WiFi覆盖的基本知识和常见问题
迎接iOS 13和iPadOS 同时告别3D Touch
坚果pro和荣耀8谁更值得买?坚果pro和荣耀8评测对比