本文是《一步一步写嵌入式操作系统》的学习笔记。
书籍工具下载可参考: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