配置wxworks6.9系统移植到xilinx zynq ps端

news2024/11/26 17:21:15

一,创建bootrom

打开打开Workbench,目录在C:\WindRiver\workbench-3.3\wrwb\platform\x86-win32\eclipse\eclipse-x86-win32

 在菜单栏,点击 File->New->Project。The New Project Wizard opens。

在 VxWorks 6.x中,选择 VxWorks Image Project

 输入project name, 比如zynq_vxworks_bootrom

基于a board support package,选择 xlnx_zynq7k BSP,编译工具链选择diab,勾选Enable WDB Target Agent,选择next下一步,VxWorks Image Project Multipage Wizard就配置完成。

 这一步保持默认,直接选择next下一步

 从the New VxWorks Image Project中,profile选择PROFILE_DEVELOPMENT,单击finish。

 从bootrom工程中右键选择build project,开始编译Kernel image。

菜单栏,project中选择open development shell打开vxworks脚本编译窗口

 选择Wind River VxWorks 6.9,然后单击OK

进入cd vxworks-6.9\target\config\xlnx_zynq7k\ 

输入make clean make zynq_vxworks_bootrom,就会生成zynq_vxworks_bootrom.elf文件

二,根据vivado的搭建修改对bootrom的硬件配置

 1,vivado中勾选的硬件有一路PS串口,用于启动文件信息打印,现在修改vxworks串口BSP

(1)config.h文件中,修改串口打印波特率和串口的数量,如果有三路修改为3,两路修改为2,一路修改为1,这里我修改为1。修改目录宏定义在xlnx_zynq7k.h,如下截图所示。

#undef  CONSOLE_BAUD_RATE
#define CONSOLE_BAUD_RATE 115200



#undef  NUM_TTY
#define NUM_TTY             N_SIO_CHANNELS

(2)在prjParams.h文件中,此宏表示bootrom生成的BOOT.BIN启动后从哪路串口进行打印,此处我配置为1,如果需要从第1路串口打印则需要将此宏定义为1,第2路串口打印需要将宏定义配置为2。

#undef  CONSOLE_TTY
#define CONSOLE_TTY 1

(3)在hwconf.c文件中,对驱动列表中的中断输入中的串口驱动的修改。

LOCAL struct intrCtlrInputs gicInputs[] = {
    /* pin,                driver,            unit,   index */

    { INT_VEC_UART1,       "zynqSioDev",       0,       0 },

2,两路网口分别连接PS和PL,连接PL的网口使用GMII转RGMII的方式

 3,分别勾选SD卡和EMMC硬件配置

(1)如果采用SD卡启动,这里需要修改SD卡驱动,增加SD卡控制器驱动组件和文件系统组件。在config.h文件中,增加SD卡控制器驱动组件和文件系统组件。

/* SDHC */
#define DRV_STORAGE_SDHC
#define DRV_SDSTORAGE_CARD
#define INCLUDE_BOOT_FILESYSTEMS

/* dosfs */
#define INCLUDE_DOSFS
#define INCLUDE_DOSFS_MAIN
#define INCLUDE_DOSFS_CHKDSK
#define INCLUDE_DOSFS_FMT
#define INCLUDE_DOSFS_FAT
#define INCLUDE_DOSFS_SHOW
#define INCLUDE_DOSFS_DIR_VFAT
#define INCLUDE_DOSFS_DIR_FIXED
#define INCLUDE_FS_MONITOR
#define INCLUDE_FS_EVENT_UTIL
#define INCLUDE_ERF
#define INCLUDE_XBD
#define INCLUDE_XBD_TRANS
#define INCLUDE_DEVICE_MANAGER
#define INCLUDE_XBD_BLK_DEV
#define INCLUDE_XBD_PART_LIB
#define INCLUDE_DISK_UTIL

(2)如果采用EMMC启动,这里需要增加EMMC驱动配置

修改EMMC驱动,EMMC驱动和SD卡驱动是互斥的,根据硬件进行相应地配置,如果包含了SD卡驱动,就不需要EMMC驱动。如果包含了EMMC驱动,则不需要再包含SD卡驱动。此处我以一路EMMC配置为例,由于默认的BSP中有两路EMMC配置,此处我们保留EMMC0,屏蔽EMMC1。

 在文件config.h中,增加EMMC控制器驱动组件和文件系统组件

#define DRV_ZYNQ_SDHC_CTRL
#define DRV_MMCSTORAGE_CARD
#define INCLUDE_DISK_UTIL
#define INCLUDE_DOSFS
#define INCLUDE_BOOT_FILESYSTEMS
#define INCLUDE_XBD_BLK_DEV
#define INCLUDE_XBD_PART_LIB
#define INCLUDE_XBD_RAMDRV

 在hwconf.c文件中,保留EMMC0的配置,删除EMMC1的中断优先级配置

#ifdef DRV_ZYNQ_SDHC_CTRL
    { INT_VEC_SDIO0,       128 },
#endif /* DRV_ZYNQ_SDHC_CTRL */

保留EMMC0的中断配置,删除EMMC1的中断触发配置

#ifdef DRV_ZYNQ_SDHC_CTRL
    { INT_VEC_SDIO0,            VXB_INTR_TRIG_LEVEL },
#endif /* DRV_ZYNQ_SDHC_CTRL */

在中断输入中保留EMMC0,屏蔽EMMC1

#ifdef DRV_ZYNQ_SDHC_CTRL
    { INT_VEC_SDIO0,       "zynqSdhci",        0,       0 },
#endif /* DRV_ZYNQ_SDHC_CTRL */

保留EMMC0驱动模块,屏蔽EMMC1驱动模块

#ifdef DRV_ZYNQ_SDHC_CTRL
LOCAL struct hcfResource zynqSdhc0Resources[] = {
    { "regBase",    HCF_RES_INT,  {(void *)ZYNQ7K_SDHC0_BASE} },
    { "clkFreq",    HCF_RES_ADDR, {(void *)sysSdhcClkFreqGet} },
    { "polling",    HCF_RES_INT,  {(void *)FALSE} },
    { "flags",      HCF_RES_INT,  {(void *)(SDHC_PIO_NEED_DELAY |
                                            SDHC_MISS_CARD_INS_INT_WHEN_INIT |
                                            SDHC_FIFO_ENDIANESS_REVERSE |
                                            SDHC_HOST_VER_REVERSE) } }
};
#define zynqSdhc0Num NELEMENTS(zynqSdhc0Resources)
#endif /* DRV_ZYNQ_SDHC_CTRL */

在驱动列表中保留EMMC0,屏蔽EMMC1

#ifdef DRV_ZYNQ_SDHC_CTRL
    { "zynqSdhci",            0, VXB_BUSID_PLB, 0, zynqSdhc0Num,   zynqSdhc0Resources },
#endif /* DRV_ZYNQ_SDHC_CTRL */

在sysLib.c文件中,屏蔽的EMMC1控制器的寄存器地址映射,保留EMMC0控制器的寄存器地址映射内容。

#if defined(DRV_STORAGE_SDHC) || defined(DRV_ZYNQ_SDHC_CTRL) 
    {
    ZYNQ7K_SDHC0_BASE,   /* SDIO */
    ZYNQ7K_SDHC0_BASE,
    SZ_4K,
    MMU_ATTR_VALID_MSK | MMU_ATTR_PROT_MSK | MMU_ATTR_DEVICE_SHARED_MSK,
    MMU_ATTR_VALID     | MMU_ATTR_SUP_RWX  | MMU_ATTR_DEVICE_SHARED
    },
/*
    {
    ZYNQ7K_SDHC1_BASE,   /* SDIO */
    ZYNQ7K_SDHC1_BASE,
    SZ_4K,
    MMU_ATTR_VALID_MSK | MMU_ATTR_PROT_MSK | MMU_ATTR_DEVICE_SHARED_MSK,
    MMU_ATTR_VALID     | MMU_ATTR_SUP_RWX  | MMU_ATTR_DEVICE_SHARED
    }, 
*/

#endif /* DRV_STORAGE_SDHC || DRV_ZYNQ_SDHC_CTRL */

4,勾选flash硬件配置,为后续flash启动固化做准备

(1)添加TFFS文件系统组件。

#define  INCLUDE_TFFS

(2)在config.h文件中,修改spi总线类型,默认为4BIT,由于我此处硬件设计为两片flash,所以修改为8BIT,如果只有一片flash可以不用修改 

#   define SPI_BUS_TYPE             SPI_SINGLE_8BIT

(3) 由于硬件上有两片16M大小的flash,所以将16M修改为32M。

#   define SPI_FLASH_SIZE           (SZ_32M)

5,修改默认boot启动参数
gem(0,0)表示从网口0启动vxWorks镜像,host表示主机名称,vxWorks.st表示vxWorks系统镜像名称,h表示主机ip地址,e表示板卡ip地址,g表示网关地址,u表示ftp用户名,pw表示ftp密码,f表示bootom启动时的特殊标志,tn表示板卡名称。

#define DEFAULT_BOOT_LINE \
    "gem(0,0)host:vxWorks h=192.168.1.36 e=192.168.1.50:ffffff00 \
     g=192.168.1.1 u=vxWorks pw=vxWorks f=0x0 tn=xlnx_zynq7k"

三,在SDK生成zynq_fsbl.elf文件

创建一个BOOT.BIN需要生成[bootloader]zynq_fsbl.elf和bootROM.elf来合成

 打开SDK,菜单栏中New选择Application Project

 输入fsbl文件名,点击next下一步

 选择zynq fsbl,点击完成。生成后,点击zynq_fsbl工程右键,build project生成elf文件

 四,生成wxworks系统BOOT.BIN启动文件

菜单栏Xilinx,选择Creat Boot Image创建启动文件

 生成BOOT.BIN启动文件

 启动wxworks系统打印信息

五,创建wxworks应用程序

选择File > New > Project > VxWorks Downloadable Kernel Module Project,点击next下一步。

输入一个 project name,比如hello_my_world

连续点击下一步

点击下一步

点击finish完成

右键选择New > File,新建一个应用程序

  取名hello_world.c,点击hello_my_world,然后finish完成

 加入应用程序代码

 wxworks应用程序举例

#include <sys/mman.h>
#define GPIO_BASE 0xE000A000
#define GPIO_DIRM_0 0x00000204
#define GPIO_OEN_0 0x00000208
#define GPIO_DATA_0 0x00000040
int main(void)
{
    printf("Hello World!\n");
    int val = 0xffffffff;
    sysOutLong(GPIO_BASE + GPIO_DIRM_0, 0x00000400);
    sysOutLong(GPIO_BASE + GPIO_OEN_0, 0x00000400);
    while (1) 
    {
        sysOutLong(GPIO_BASE + GPIO_DATA_0, val);
        sleep(1);
        val ^= 0xffffffff;
    }
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/587278.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

音乐驱动虚拟人——娱乐场景下虚拟人的AI驱动实践

元宇宙时代的娱乐场景下&#xff0c;通过高精度的AI驱动模型还原真人的歌舞表演&#xff0c;有着更低成本、更多创造性、精彩度、实时互动性的综合优势&#xff0c;是虚拟数字人驱动的最终形态。LiveVideoStackCon 2022北京站邀请到腾讯音乐天琴实验室计算机视觉负责人——董治…

动画图解程序?这个可视化运行环境太方便了

入门教程、案例源码、学习资料、读者群 请访问&#xff1a; python666.cn 大家好&#xff0c;欢迎来到 Crossin的编程教室 &#xff01; 了解代码的执行过程是编程的基本要求。 一个熟练的编程老手只需要用肉眼看着代码&#xff0c;就能对其运行的过程有所了解。然而对于刚接触…

权限维持-SSP-DLL 加载

前言 继续学习中&#xff0c;今天是权限维持的东西&#xff0c;大家永远不要忘记初心&#xff0c;要一起奋斗哦&#xff01; 注&#xff1a;单机环境和域环境都可以使用 复现 一.进程注入lsass.exe 使用mimikatz将伪造的SSP注入内存&#xff0c;这样用户在注销重新登录的时候就…

机器学习库Scikit-learn

本文目录 3.1 背景知识3.2 Scikit-learn概述3.3 Scikit-learn主要用法 3.3.1 基本建模流程3.3.2 数据预处理3.3.3 监督学习算法3.3.4 无监督学习算法3.3.5 评价指标3.3.6 交叉验证及超参数调优3.4 Scikit-learn总结参考文献 Scikit-learn是基于NumPy、SciPy和Matplotlib的开源P…

全国流体力学盛会召开,飞桨AI4S携最新科研进展亮相西湖大学

‍‍‍‍ 5月20-21日&#xff0c;第四届全国智能流体力学研讨会暨第二届智能流体力学产业联合体大会在西湖大学召开。此次会议由中国力学学会、中国空气动力学会、《水动力学研究与进展》编委会、西湖大学、浙江大学、上海交通大学、中国船舶集团第七〇八研究所主办&#xff1b…

nsis制作windows安装包-修改安装目录读写权限

目录 1. 背景2. 使用AccessControl修改权限2.1 AccessControl下载安装2.2 修改脚本 1. 背景 使用nsis制作的windows安装包在安装时&#xff0c;将安装目录设置到非系统盘里&#xff0c;安装完成后一般不会出现读写权限的异常问题。但是&#xff0c;安装时选择在系统盘里安装&a…

envi随机森林分类5.3版本

在App Store中搜索随进森林工具&#xff0c;进行下载并重启envi软件 含有三个模块 Train Random Forest Model 1. Input Raster&#xff1a;输入影像。选择图像时不能进行空间、光谱裁剪或掩膜&#xff08;ENVI 5.5及以上版本已经禁止显示这些按钮&#xff09; 2. Random Sam…

无需租云服务器,Linux本地搭建web服务,并内网穿透发布公网访问

文章目录 前言1. 本地搭建web站点2. 测试局域网访问3. 公开本地web网站3.1 安装cpolar内网穿透3.2 创建http隧道&#xff0c;指向本地80端口3.3 配置后台服务 4. 配置固定二级子域名5. 测试使用固定二级子域名访问本地web站点 转载自cpolar文章&#xff1a;Linux CentOS本地搭建…

c++ 11标准模板(STL) std::map(八)

定义于头文件<map> template< class Key, class T, class Compare std::less<Key>, class Allocator std::allocator<std::pair<const Key, T> > > class map;(1)namespace pmr { template <class Key, class T, clas…

香港财经学院工商管理硕士(MBA)含金量

近年来&#xff0c;随着中国经济的崛起&#xff0c;越来越多的学生和从业人员开始关注MBA教育。在香港地区&#xff0c;香港财经学院的MBA项目备受瞩目&#xff0c;被誉为是该地区最具含金量的MBA项目之一。首先&#xff0c;香港财经学院作为一家优秀的商学院&#xff0c;在教学…

【C++系列P1】带上这篇基础小宝典,进发C++!(持续更新ing~)

​​​​​​​ 前言 大家好吖&#xff0c;欢迎来到 YY 滴 C系列 &#xff0c;热烈欢迎&#xff01;(持续更新ing~&#xff09;本章主要内容面向刚刚学完C语言&#xff0c;准备或正在接触C的老铁。而往往C奇多的小特性和知识点让铁铁们头晕晕脑涨涨&#xff0c;因而本章收纳了…

为什么北欧的顶级程序员数量远超中国?(续)

之前写过一篇文章《为什么北欧的顶级程序员数量远超中国&#xff1f;》&#xff0c;讲了北欧大神们开发的Linux、MySQL、Chrome V8、MineCraft、QT等优秀软件&#xff0c;分析了北欧有如此多顶级程序员的主要原因。 有位读者Ven 源 留言说&#xff0c;除了文章中教育优势&…

碳纤维单丝外径测试中的纳米分辨率激光衍射法解决方案

摘要&#xff1a;碳纤维单丝热膨胀系数是碳纤维复合材料设计、生产与可靠性和寿命评估的重要参数&#xff0c;本文针对单丝径向高温热膨胀系数测试这一难题提出了相应的解决方案。解决方案的核心内容是基于激光衍射法和高温辐射加热&#xff0c;并采用衍射轮廓拟合技术以及相应…

Dropout层的个人理解和具体使用

Dropout层的作用 dropout 能够避免过拟合&#xff0c;我们往往会在全连接层这类参数比较多的层中使用dropout&#xff1b;在训练包含dropout层的神经网络中&#xff0c;每个批次的训练数据都是随机选择&#xff0c;实质是训练了多个子神经网络&#xff0c;因为在不同的子网络中…

Linux常用命令——gzip命令

在线Linux命令查询工具 gzip 用来压缩文件 补充说明 gzip命令用来压缩文件。gzip是个使用广泛的压缩程序&#xff0c;文件经它压缩过后&#xff0c;其名称后面会多处“.gz”扩展名。 gzip是在Linux系统中经常使用的一个对文件进行压缩和解压缩的命令&#xff0c;既方便又好…

Python过滤信息,如省位中包含广东、安徽、浙江这3个省份的话,就pass,怎么破?...

点击上方“Python爬虫与数据挖掘”&#xff0c;进行关注 回复“书籍”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 但令心似金钿坚&#xff0c;天上人间会相见。 大家好&#xff0c;我是皮皮。 一、前言 前几天遇到了一个小问题&#xff0c;在做资料的时候&#xff0c…

7位专家齐聚openGauss Developer Day 2023云和恩墨专题论坛,共论数据库自主创新改造与技术发展...

5月26日&#xff0c;云和恩墨在「openGauss Developer Day 2023」主论坛上大放异彩&#xff08;←点此回顾主论坛精彩时刻&#xff09;&#xff0c;更是通过举办一场数据库技术创新与应用实践分论坛&#xff0c;力邀7位重量级嘉宾就数据库创新能力构建、行业应用实践和迁移替代…

SpringBoot配置文件的注入和读取

目录 1. 配置文件的作用 2. 两种配置文件的格式&#xff1a; 2.1 properties 基本语法&#xff1a; 2.1.1 写入 2.1.2 读取 执行原理 2.1.3 缺点分析 2.2 yml 基本语法&#xff1a; 2.2.1 写入&#xff08;非对象&#xff09; 2.2.3 配置对象 2.2.4 配置集合 多个配…

【Linux初阶】基础IO - 文件管理(深入理解文件描述符) | 重定向

文章目录 一、文件管理引入二、理解文件描述符三、文件描述符表四、文件描述符的分配规则五、重定向六、使用 dup2 系统调用实现重定向1.模拟实现 >&#xff08;输出&#xff09;2.模拟实现 >>&#xff08;追加&#xff09;3.模拟实现 <&#xff08;输入&#xff0…

【观察】浪潮信息:自研液环式真空CDU技术,将被动应对变为主动防御

毫无疑问&#xff0c;在“双碳”战略的大环境下&#xff0c;数据中心走向绿色低碳和可持续发展已成为“不可逆”的大趋势&#xff0c;特别是随着全国一体化大数据中心、新型数据中心等政策文件的出台、“东数西算”工程的正式启动&#xff0c;数据中心的建设规模和数量呈现出快…