本文是《一步一步写嵌入式操作系统》的学习笔记。

书籍工具下载可参考:https://github.com/Joyounger/leeos

工具:skyeye 用于在linux上模拟开发板,书中使用的是s3c2410;ubuntu12.0+skyeye1.2.6

1.在ubuntu中安装skyeye1.2.6

2.配置skyeye.conf文件,文件和代码位于同级目录下

#cpu型号
cpu:arm920t
#平台
mach:s3c2410x
#物理内存配置
mem_bank:map=M,type=RW,addr=0x00000000,size=0x00800000,file=./helloworld.bin,boot=yes
mem_bank:map=I,type=RW,addr=0x48000000,size=0x20000000

3.测试代码

//串口寄存器,写入值以后会从屏幕输出
#define UFCONO ((volatile unsigned int *)(0x50000020))

void helloworld(void)
{
        const char *p = "helloworld\n";
        while(*p)
        {
                *UFCONO = *p++;
        }
        while(1);
}

4.编译

#编译文件,不加-O2参数会因为没有main函数报错
arm-elf-gcc -O2 -c helloworld.c

#将执行文件链接到0地址
arm-elf-ld -e helloworld -Ttext 0x0 helloworld.o -o helloworld

#将elf文件中的机器码拷贝出来
arm-elf-objcopy -O binary helloworld helloworld.bin

5.执行skyeye

root@ubuntu:/home/os/t1# skyeye 

**************************** WARNING **********************************
If you want to run ELF image, you should use -e option to indicate
your elf-format image filename. Or you only want to run binary image,
you need to set the filename of the image and its entry in skyeye.conf.
***********************************************************************

Your elf file is little endian.
arch: arm
cpu info: armv4, arm920t, 41009200, ff00fff0, 2 
mach info: name s3c2410x, mach_init addr 0x806f9d0
uart_mod:0, desc_in:, desc_out:, converter:
SKYEYE: use arm920t mmu ops
Loaded RAM   ./helloworld.bin
helloworld

 

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐