• HylicOS --- 环境搭建 与 环境测试(巨多坑)


    环境选择

    Cygwin + Skyeye

    Cygwin是一个在windows平台上运行的类UNIX模拟环境,是cygnus solutions公司开发的自由软件(该公司开发的著名工具还有eCos,不过现已被Redhat收购)。它对于学习UNIX/Linux操作环境,或者从UNIX到Windows的应用程序移植,或者进行某些特殊的开发工作,尤其是使用GNU工具集在Windows上进行嵌入式系统开发,非常有用。

    SkyEye是一个开源软件(opensource software)项目,中文名字是“天目”。SkyEye的目标是在通用的Linux和Windows平台实现一个仿真集成开发环境,模拟常见的嵌入式计算机系统(目前支持基于ARM7tdmi的AT91开发板);可在SkyEye上运行uclinux以及uC/OS-II等多种嵌入式操作系统,并对它们进行源码级的分析和测试。

    使用cygwin和skyeye在win10 上搭建arm仿真开发环境,模拟s3c2410x。

    两个软件的下载链接已在开头给出,提取码:uheu。

    Cygwin 和 Skyeye的 安装

    依次选择:
    install from internal --> All Users --> Direct Connection --> User URL选择 mirrors.168.cn --> 下一步 --> 选择要安装的软件包

    –> 找到devel,安装make和gcc4两组软件包,具体下载过程参考该链接。
    下载不完全,在cygwin环境运行make时可能会报错segmentation fault!

    skyeye.exe已经在网盘链接中给出,直接将该软件放置到/usr/bin目录下。如果采取源码编译生成skyeye的方法,我试了几次,总是会在./configure这一步报错

    注意事项

    1. cygwin的目录默认在c:\cygwin64下 必须运行该目录下Cygwin.bat打开Cygwin终端,否则程序使用串口打印时会报错
    2. 如果调用某个命令报错: not found,需要使用全路径访问这个命令,如skyeye.exe :/cygdrive/c/cygwin64/usr/bin/skyeye.exe
    3. cygwin软件包选择时,选择不完全,在cygwin环境运行make时可能会报错segmentation fault!

    测试

    1 配置文件

    在/home/yourname 目录下创建一个test文件夹

    先创建skyeye的配置文件skyeye.conf:

    cpu:arm920t
    mach : s3c2410x
    mem_bank:  map  =  M,  type  =  RW,  addr  =  0x00000000,  size  =0x00800000, file=./helloworld.bin
    #all peripherals I/O mapping area
    mem_bank:  map  =  I,  type  =  RW,  addr  =  0x48000000,  size  =0x20000000
    
    • 1
    • 2
    • 3
    • 4
    • 5

    该配置文件的解读:
    cpu: 指定CPU的芯片系列
    mach: 指定芯片的具体信号
    mem_bank:指定芯片内存空间特性

    • M选项指定该段是内存
    • I选项指定该段是外设端口

    type: 指定内存空间的读写属性
    file: 指定预先要被加载到这段内存空间的映像文件
    boot=yes:指定默认从此处启动

    mem_bank必须写成独立的一行

    测试程序会指定程序运行地址在RAM的0x0处,因此第一个bank给程序使用
    测试程序会访问串口的FIFO寄存器,该寄存器是外设端口,因此第二个bank的map设为I,地址要保证0x50000020这个位置是作为外设寄存器被映射出来的。

    2 测试文件

    串口向终端输出hello world 测试配置环境是否正常

    创建helloworld.c

    #define UFCON0  ((volatile unsigned int *)(0x50000020))
    void helloworld(void){
        const char *p="helloworld\n";
        while(*p){
            *UFCON0=*p++;
        };
        while(1);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    编译 链接

       arm-elf-gcc  -O2  -c  helloworld.c
       arm-elf-ld -e helloworld -Ttext 0x0 helloworld.o -o helloworld
       arm-elf-objcopy  -O  binary  helloworld  helloworld.bin
    
    • 1
    • 2
    • 3

    ld的-Ttext就是前面说的指定运行地址在内存0地址
    objcopy将ELF格式文件中的二进制机器码抽离出来,生成纯二进制文件helloworld.bin,纯粹的可执行机器码镜像。

    3 运行skyeye

    必须使用该命令运行:

    /cygdrive/c/cygwin64/usr/bin/skyeye.exe
    
    • 1

    skyeye去读取skyeye.conf模拟出硬件环境,终端中显示:
    skyeye默认地将串口映射到命令行中,方便虚拟硬件的模拟。

       ……
       Your elf file is little endian.
       arch: arm
       cpu info: armv4, arm920t, 41009200, ff00fff0, 2
       mach info: name s3c2410x, mach_init addr 0x806ad40
       uart_mod:0, desc_in:, desc_out:, converter:
       SKYEYE: use arm920t mmu ops
       Loaded RAM   ./helloworld.bin
       helloworld
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
  • 相关阅读:
    Lua 模块与包
    面试算法-数据结构二
    Window上Java通过jni调用C++入门尝鲜
    机器学习实训(3)——训练模型(补充)
    Java面试题大全(整理版)1000+面试题附答案详解,最全面详细,看完稳了
    【MATLAB源码-第46期】基于matlab的OFDM系统多径数目对比,有无CP(循环前缀)对比,有无信道均衡对比。
    【GIT版本控制】--远程仓库
    ClickHouse 存算分离改造:小红书自研云原生数据仓库实践
    【c++&leetcode】1382. Balance a Binary Search Tree
    数据分析入门导读
  • 原文地址:https://blog.csdn.net/weixin_43604927/article/details/128208442