由于项目关系,有幸接触到了 VxWorks 的源代码,于是带着膜拜的心态开始阅读并分析其源代码,并将分析的结果记录在这里。我分析的版本是 VxWorks 6.7。

国内关于 VxWorks 的资料比较少,而且网上找到的资料不少是针对 VxWorks 5.x 的,和旧版比起来,VxWorks 6.x 增加了对多核硬件(SMP)的支持,并且加入了实时进程(RTP),可以开发用户态的应用程序,代码上的区别还是很大的。

文件组织结构

假设 VxWorks 开发套件安装在C:\WindRiver,那么 VxWorks 6.7 的源代码位于C:\WindRiver\vxworks-6.7\target。

其中有如下子目录:

前言

VxWorks 7.0 整合了过往版本对用户管理的功能,通过Layer 管理系统用户,以支持Target Shell、SSH、FTP、Telnet等用户交互场景。

本文章介绍用户管理组件的配置方法和使用相关。

用户认证和管理

即:User Authentication and Management

如何配置用户认证功能?

1. VSB配置

选择 USER_MANAGEMENT

并可选择性配置其下安全策略:

  • USER_MANAGEMENT_POLICY
  • USER_MANAGEMENT_USER_PRIVILEGES
  • USER_MANAGEMENT_LDAP

注意:为了降低用户管理功能失败的风险,以上3个可选项不用配置。配置后,可能会出现无法增加用户的问题。

2. VIP配置

1)通过组件 SELECT_USER_AUTHENTICATION_BACKEND 选择身份验证后端以使能用户管理,默认配置为本用户认证 INCLUDE_LOCAL_AUTH。

2)配置组件 INCLUDE_SEC_VAULT_KEP_OBFUSCATOR,第一次配置时会报错,这是因为SEC_VAULT_KEY_ENCRYPTING_PW参数未设置。此参数应配置为至少40字节长的随机字符串,示例如下:

用于启动VxWorks7的VxBL生成与移植

VxWorks 7内核也可以通过uboot来启动,但风河还是提供了自己的Bootloader,名为VxBL,和QNX的IPL一样,也许只是为了简化一些行业领域的认证工作,毕竟uboot的代码量太大了。

生成AM57xx的VxBL

编译VxBL

1.cmd进入目录 D:\WindRiver4.0_SR0640\vxworks-7\pkgs_v2\boot\vxbl-2.0.1.1

VxWorks7 AM57xx VxBL

2.创建VxBL工程,输入make project CPU=ARMARCH7 BSP=ti_sitara_a15 TOOL=llvm FORCE=1

添加Shell组件

在“VxWorks 7:编译并启动AM57xx的VxBL”一文中,文章最后VxWork虽然启动,但是并没有进入shell,这是因为默认的VIP工程里并没有添加shell组件,需要我们自己添加。

VxWorks7 Add Shell Component

今天和大家谈谈VxWorks 7下SD卡的vxbus驱动挂接,以及文件系统格式化的流程,VxWorks 7下的的vxbus驱动基于设备树,首先必须增加设备树节点,如下:


sdhc0: sdhc@E0100000
{
        compatible = "zynq,sdhc";
        reg = ;
        clock-frequency = ;
        interrupts = ;
        interrupt-parent = <&intc>;
        embedded = ;
        bus-width = ;
        max-dev-clock-frequency = ;
        card-status-check = ; 
};

了解清楚vxbus设备驱动SD卡的挂接流程,对于我们设备驱动的开发至关重要,具体流程如下:

1、设备初始化时会自动加载并识别设备树的节点配置,并匹配相应的驱动程序,首先匹配到SDHC主控制器设备compatible = "zynq,sdhc"; 在这个驱动中会调用attach去初始化相应的设备,具体代码如下: