引导SylixOS
在学习BSP移植之前,我们先来看看SylixOS是如何被Bootloader引导起来的。我们都知道,任何一种操作系统内核运行之前都需要通过某种方式导入到内存中,然后CPU跳转到内核入口处运行,这个过程就叫做引导系统。至于具体通过什么方式导入到内存中,根据实际硬件系统不同而不同,可能是通过网络方式下载到内存中,也可能是从磁盘等存储介质上读取到内存中,甚至有可能是通过USB下载到内存中。这些工作一般都是由引导程序做的,常见的引导程序如x86平台上的BIOS、arm平台上的U-Boot、龙芯平台上的PMON等等。引导程序大致的作用就是初始化最基本的硬件环境,然后将操作系统内核加载到内存中,最后跳转过去执行内核。
在嵌入式领域使用的最多的Bootloader是U-Boot,SylixOS内核镜像也可以使用U-Boot来引导,通过这篇文章我们来学习如何使用U-Boot来引导SylixOS。
我们本次教程使用的是全志R16平台,通过查阅芯片手册得知,R16上电会首先从SDC0(SD卡控制器0)寻找Bootloader运行:
这个Bootloader就是U-Boot,U-Boot运行后我们就可以使用U-Boot的fatload 命令将SylixOS镜像从SD卡中加载到内存固定位置。我们首先通过fatls 命令查看SD卡中有哪些文件:
=> fatls mmc 0:1 System Volume Information/ 3202776 bsp_clockwork.bin 2313216 rootfs.img 797448 liteos.bin 3574472 bsp_clockwork.bin2 ofi/ 3ds/ a9lh/ boot9strap/ FilesToInstall/ luma/ 4 file(s), 7 dir(s) =>
其中bsp_clockwork.bin就是SylixOS内核镜像,SylixOS镜像一般加载到内存中时都是放在内存基址处的,通过查阅R16芯片手册得知,内存基址为0x40000000:
所以我们可以通过fatload 命令将SylixOS镜像加载到0x40000000地址:
=> fatload mmc 0:1 40000000 bsp_clockwork.bin reading bsp_clockwork.bin 3202776 bytes read in 791 ms (3.9 MiB/s) =>
加载完成后就可以直接跳转到0x40000000地址处运行SylixOS内核镜像了,这是通过go 命令实现:
=> go 40000000 ## Starting application at 0x40000000 ... environment variables load from /etc/profile fail, error: No such file or directory Press <n> to NOT execute /etc/startup.sh (timeout: 1 sec(s)) can not open /etc/startup.sh: No such file or directory sysname : sylixos nodename : sylixos release : Enterprise version : 2.0.0 machine : Allwinner R16 (Quad-core ARM Cortex-A7 1.2GHz VFPv4) [[ (R) [[[[ [[[[ [[ [[[[ [[[[ [[ [[ [[ [[ [[ [[ [[ [[ [[ [[ [[ [[[[ [[ [[ [[ [[ [[ [[ [[ [[ [[ [[ [[ [[ [[ [[ [[ [[ [[ [[ [[ [[ [[[[ [[ [[ [[ [[ [[ [[ [[ [[ [[ [[ [[ [[ [[ [[ [[ [[ [[ [[[[ [[ [[ [[ [[ [[ [[ [[ [[ [[ [[ [[ [[ [[ [[ [[ [[[[ [[[[ [[[[[[ [[[[[[ [[ [[ [[[[ [[[[ [[ [[ KERNEL: LongWing(C) 2.0.0 [[[[ COPYRIGHT ACOINFO Co. Ltd. 2006 - 2020 SylixOS license: Commercial & GPL. SylixOS kernel version: 2.0.0 Code name: Enterprise CPU : Allwinner R16 (Quad-core ARM Cortex-A7 1.2GHz VFPv4) CACHE : 64KBytes(D-32K/I-32K) L1-Cache per core, 512KBytes L2-Cache PACKET : ALLWINNER R16 Demo ROM SIZE: 0x00400000 Bytes (0x00000000 - 0x003fffff) RAM SIZE: 0x0c800000 Bytes (0x40000000 - 0x4c7fffff) BSP : BSP version 1.0.0 for Enterprise [root@sylixos:/root]#
如果一切顺利的话就可以看到SylixOS的启动Logo了,输入top 命令查看CPU使用率:
[root@sylixos:/root]# top CPU usage checking, please wait... CPU usage show (measurement accuracy 1.0%) >> NAME TID PID PRI CPU KERN ---------------- ------- ----- --- ------ ------ t_tshell 4010011 0 150 0.0% 0.0% t_telnetd 401000e 0 160 0.0% 0.0% t_ftpd 401000d 0 160 0.0% 0.0% t_snmp 401000c 0 110 0.0% 0.0% t_netproto 401000b 0 110 0.0% 0.0% t_netjob 401000a 0 110 0.0% 0.0% t_sync 4010009 0 252 0.0% 0.0% t_reclaim 4010008 0 253 0.0% 0.0% t_hotplug 4010006 0 250 0.0% 0.0% t_power 4010005 0 254 0.0% 0.0% t_log 4010004 0 60 0.0% 0.0% t_except 4010003 0 0 0.0% 0.0% t_isrdefer 4010002 0 0 0.0% 0.0% t_itimer 4010001 0 20 0.0% 0.0% t_idle0 4010000 0 255 99.0% 0.0% [root@sylixos:/root]#
我们这个BSP开发系列教程最后就实现这样的SylixOS最小系统开发,所谓的最小系统开发就是指完成SylixOS下的串口、中断控制器、定时器驱动开发,最终将SylixOS启动起来并可以在shell命令行进行交互,通过这样一个最小系统的开发,我们就能熟悉SylixOS下BSP的基本框架了,至于其他外设驱动如何开发不在本教程的教学范围之内,请参考本网站其他SylixOS开发专题系列文章。
2021年8月4日 18:23 1F
你好,我想问一下,为什么芯片手册上写DDR时2G,但是后面的文章中都是说的内存大小为1G呢?
2021年8月9日 11:04 B1
@ yhf 芯片手册上的2G , 意思是该芯片可支持最大的内存为2G . 但实际中 , 板子用的是 1G 的内存条 . 可以这样理解, 笔记本电脑所支持最大内存 不一定等于 电脑实际安装的内存条 . 所以 , 才会经常说再买个内存条来扩充内存.
2023年12月11日 21:08 2F
这是3ds用的tf卡啊