研究内核原理前需要提前对内核有个感性的认识,本文介绍笔者自己动手编译SylixOS内核并运行在自己编译的虚拟机平台上。
简介:编译SylixOS内核与Linux还有有点区别。Linux运行由Kernel与根文件系统两部分组成,SylixOS内核中集成了根文件系统,因此只需要编译出一个内核镜像即完成了操作系统最小系统运行环境。文件系统中的软件、库等都可以动态部署。
创建内核镜像步骤很简单只需要三步:
- 创建Base工程
- 创建Bsp工程,Bsp工程生成内核BIN文件
- 用flashimg工具将uboot和内核镜像BIN文件打包成虚拟nand flash存储文件,启动QEMU虚拟机运行即可
创建 SylixOS Base 工程
创建BASE工程这个步骤前文有介绍,工程名Mini2440Base。
创建 SylixOS BSP 工程
IDE工程向导中创建Mini2440Bsp工程,并指定Mini2440Base所在的工程目录。
创建BSP工程
内核镜像是由BSP工程生成的。梳理下关系,BASE工程实际上是核心源码,这部分源码具有平台移植性,具体硬件平台的适配代码在BSP工程中。
BASE工程与BSP工程的目录结构
从源码目录可以看出SylixOS源码组织的思路,BASE工程中包含平台无关代码和体系结构代码;BSP工程中主要是板级适配代码。例如:我要运行开发板是MINI2440, CPU S3C2440, CPU的体系结构是ARM920T, 那么ARM920T的相关代码在BASE中,S3C2440外设驱动在BSP中。通过以上结论如果要SylixOS运行在自己的板子上,那么一般情况下只需要修改BSP工程中的文件即可。
编译 SylixOS BSP 工程
配置工程,里面主要是内存分布的配置,这个内存分布以后再研究。
配置好后直接编译,工程DEBUG目录下生成了Mini2440Bsp.bin文件,这个就是内核镜像文件。
打包nand.bin
将Mini2440Bsp.bin拷贝到我自己制作的flashimg工具下打包
./flashimg -s 128M -t nand -f nand.bin -p uboot.part -w boot,u-boot.bin -w kernel,Mini2440Bsp.bin -z 2048
nand.bin 生成的nand镜像
uboot.part flash分区表
uboot.bin uboot二进制文件
Mini2440Bsp.bin 内核镜像
启动虚拟机运行测试
sudo tunctl -u $USER -t tap0 #给QEMU设置的虚拟网卡
sudo ifconfig tap0 192.168.42.1
qemu-system-arm -M mini2440 -serial stdio -mtdblock nand.bin -usbdevice mouse -kernel uImage -net nic,vlan=0 -net tap,vlan=0,ifname=tap0,script=no,downscript=no
启动QEMU后会进入uboot.bin, uboot中将内核加载进内存,具体如下:
#nand read 30000000 60000 6000000 将内核加载到内存物理地址
#go 30000000 启动内核
成功启动系统。