SylixOS BSP开发(二)

gewenbin
gewenbin
gewenbin
188
文章
15
评论
2021年4月2日21:43:39 3 3,508

引导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运行:

SylixOS BSP开发(二)

这个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:

SylixOS BSP开发(二)

所以我们可以通过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开发专题系列文章。

gewenbin
  • 本文由 发表于 2021年4月2日21:43:39
  • 转载请务必保留本文链接:http://www.databusworld.cn/10115.html
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

评论:3   其中:访客  3   博主  0
    • yhf yhf 4

      你好,我想问一下,为什么芯片手册上写DDR时2G,但是后面的文章中都是说的内存大小为1G呢?

        • Hello World Hello World 4

          @ yhf 芯片手册上的2G , 意思是该芯片可支持最大的内存为2G . 但实际中 , 板子用的是 1G 的内存条 . 可以这样理解, 笔记本电脑所支持最大内存 不一定等于 电脑实际安装的内存条 . 所以 , 才会经常说再买个内存条来扩充内存.

        • jejer jejer 4

          这是3ds用的tf卡啊