zoukankan      html  css  js  c++  java
  • gbios

     一个不错的国内bios项目:目前支持2410、2440。6410部分支持

     开源项目主页介绍:http://www.maxwit.com/msg.php/96.html

    ChinaUnix论坛(http://linux.chinaunix.net/bbs/forum-70-1.html)上的

    项目主页: http://code.google.com/p/maxwit/ 

    -------------------------------------------------------------------------------------------------------------------------------------------- 

    http://blog.chinaunix.net/u1/34474/showart.php?id=2067860

    MaxWit及其中的g-bios在mini2440的初次使用

     前段时间上网的时候无意中看到了国内的一个开源项目maxwit,看了其中的介绍感觉还不错,所以就下载了相关的文档和源码试着用了用。经过了一些学习,发现可以很容易地使用MaxWit的开发环境编译出了arm的toolchain和bootloader,其他的功能还没有实验,有待学习。MaxWit有比较详细的文档资料你可以从网上单独下载,也可在下载源代码时得到。现在我就根据自己的经验简单的介绍一下使用MaxWit的开发环境编译toolchain和g-bios。

        (1)首先通过svn的方式下载MaxWit的开发环境编译:在你想要存放源码的地方执行 

    svn co http://maxwit.googlecode.com/svn/trunk/ maxwit-read-only

            当前目录下将会创建一个名为“maxwit-read-only”的子目录,其中包含了MaxWit开放实验室开发环境中开源项目的创建脚本、g-bios源代码,以及GNU交叉编译工具编译时需要的补丁。这些基本上全是脚本和补丁,所以很快就下载完了。
            这些脚本值得一看,都是自动下载源码、打补丁、配置编译源代码的脚本。让初学者能轻松的制作toolchain,并编译代码。

        (1.1)我自己又将下载下来的开发环境代码有复制一份使用,以便修改后对比。

        (2)代码下载后,首先要编译一个交叉工具。但是我当前下载的代码还有一点小bug,我修正后制作了补丁,先打上补丁在继续吧。

    diff -uaNr maxwit-read-only/core/bmw_base maxwit/core/bmw_base
    --- maxwit-read-only/core/bmw_base 2009-09-08 21:03:29.000000000 +0800
    +++ maxwit/core/bmw_base 2009-09-10 09:22:56.000000000 +0800
    @@ -139,10 +139,11 @@
         echo -"."
     
         case "${pkg}" in
    - glibc-*)
    + glibc-ports-*)
             rm -rf glibc-ports-${GLIBC_VER}
             tar xf ${SRC_PATH}/glibc-ports-${GLIBC_VER}.tar.* || exit 1
             mv glibc-ports-${GLIBC_VER} ${MWP_GLIBC}/ports
    + pkg=${MWP_GLIBC}/ports
             ;;
     
         libtool-2.2.6a | texinfo-4.13a)
    diff -uaNr maxwit-read-only/toolchain/build maxwit/toolchain/build
    --- maxwit-read-only/toolchain/build 2009-09-08 21:03:25.000000000 +0800
    +++ maxwit/toolchain/build 2009-09-10 09:21:56.000000000 +0800
    @@ -21,+21,7 @@
             ${MWP_BINUTILS} \
             ${MWP_GCC} \
             ${MWP_GLIBC} \
    + ${MWP_GLIBC_PORTS} \
             
    "
     
         CheckPkg "${MWP_KERNEL} ${TOOLCHAIN_PKG_LIST}

     
        在maxwit-read-only(或者备份出的代码)目录下执行
            

    ./build


    [MaxWit Linux Building Menu] (configured for s3c2440)

         1). Build Host Environment
         2). Build GNU Toolchain
         3). Build Bootloader (g-bios)
         4). Build Linux Kernel (linux-2.6.29.4)
         5). Build Basic System (busybox or coreutils)
         6). Build Lib/App (vim,perl)
         7). Build Lib/App (alsa,libmad,mpg123,madplay)
         8). Build Lib/App (MPlayer)
         9). Build Lib/App (jpeg,gif,tiff,png,fbv)
        10). Build Lib/App (SDL,DirectFB)
        11). Build Lib/App (usbutils,tslib)
        12). Build 3D Game (doom)
        13). Testing on QEMU
        14). Create File System Images (yaffs2,jffs2,cramfs,etc.)
         x). Exit

    Your choice[1-14]? 2


        然后选择[2],脚本就会下在${HOME}下建立目录,并检查其中是否已经有需要的软件包,否则会询问是否下载此包。如果你已经下载好了这些软件包,直接放到相应目录就可以加快进度。确认所有的软件包已经获得后,脚本会对其解压,并自动打上补丁(如果需要),开始全自动的编译工作。期间基本不会碰到问题,成功后会产生gcc-4.4.0的交叉编译器。至于编译器是针对什么平台的,可以在core/bmw_base脚本中设置TARGET_SOC="????",默认是S3C2440,所以我没改过。

        (3)编译g-bios,在上面的交叉编译器编译好之后在选[3]就可以了,基本不用怎么修改就能实现基本的引导内核的功能。对于2440来说还是要改一个小地方:

    diff -uaNr maxwit-read-only/g-bios/include/arch/s3c24xx.h maxwit/g-bios/include/arch/s3c24xx.h
    --- maxwit-read-only/g-bios/include/arch/s3c24xx.h 2009-09-08 21:03:21.000000000 +0800
    +++ maxwit/g-bios/include/arch/s3c24xx.h 2009-10-10 23:20:49.000000000 +0800
    @@ -35,+35,7 @@
     #define GBIOS_BH_OFFSET 1
     
     
    // # fixme

    -#define CONF_MACH_ID 2318
    +
    //#define CONF_MACH_ID 2318

     
     #ifdef CONF_MACH_ID
     #define MACH_ID CONF_MACH_ID

        否则会出现内核运行时会出现machine ID不匹配的错误。

        (4)编译很快,因为程序不大。完成后会在${HOME}/maxwit/images(默认情况)下出现g-bios-bh.bin和g-bios-th.bin。
            g-bios-th.bin是g-bios的第一阶段,小于4K(大约3.6K)符合24x0系列的nand启动条件,所以直接将他烧到nand的 0x0 地址处。
            之后就可以从nand启动,并通过串口的kermit协议引导g-bios-bh.bin,实现完整启动。这部分及其他的操作可以参考源码自带的中文文档操作了,上面讲得很清楚。我就不多说了。附上启动信息:


        +----------------------------------+
        | Welcome to MaxWit g- |
        | (http:
    //maxwit.googlecode.com) |

        | [09-10-10 12:28:05] |
        +----------------------------------+

    ARCH = ARM v4T
    CPU = ARM920
    PLAT = S3C2440
    NAND = 0xEC:0x76
    Load g-bios from (1.Flash, 2.Serial): 1
     1. [ArchHeapInit() @ 0x330121a4]
    Init arch: heap init, region = [0x33013250, 0x33d80000]


     2. [MW2440XInit() @ 0x330121f4]


     3. [NetCoreInit() @ 0x33012544]
    Init subsystem: Network Subsystem


     4. [FlashCoreInit() @ 0x33012944]
    Init subsystem: Flash Subsystem.


     5. [S3c24xxPwmInit() @ 0x33012a4c]
    Init subsystem: Timer init
    Using default value: loop_per_usec = 1


     6. [S3c24xxGpuInit() @ 0x3301246c]


     7. [DM9000Init() @ 0x3301258c]
    Init driver: DM9000
    DM900x ID = 0x9000, Varient = 0xb8c, Rev = 0.
    Detecting ethernet speed ... 100M Full Duplex 


     8. [CS8900Init() @ 0x330127c4]
    CS8900 NOT 


     9. [S3C2440NandProbe() @ 0x33012998]
    S3C2440NandProbe():
    NAND-0 is detected: Vendor ID = 0xec, Device ID = 0x76 (Samsung K9F1208)
    Flash details:
        Chip size = 0x04000000 (64M)
        Block size = 0x00004000 (16K)
        Page size = 0x00000200 (512)
        OOB size = 0x00000010 (16)
    Scanning bad blocks:

    Total: 1 nand chip detected


    10. [SysConfInit() @ 0x33012edc]
    Init application: System Configuration.

     Parition List: (on K9F1208)
    ----------------------------------------------------------------
     Index Start End Size Type Name
    ----------------------------------------------------------------
       0* 0x00000000 - 0x00080000 512K g-bios "g-bios"
       1 0x00080000 - 0x00300000 2M512K linux "linux"
       2 0x00300000 - 0x01b00000 24M yaffs2 "rootfs"
       3 0x01b00000 - 0x04000000 37M yaffs2 "data"
    ----------------------------------------------------------------


    Autoboot after 2 seconds. Press any key to interrupt.
    g-bios: 0# 

       
    我只要简单的几步就可以实现g-bios的编译和烧写。以下是启动到g-bios-bh.bin后出现的三色屏。
     
     

       我已经在mini2440上成功的用g-bios启动了Linux系统(使用nfs挂载rootfs)。对于maxwit,还有更多的东西需要研究,有空我再写上来。 

  • 相关阅读:
    问题-[DelphiXE2]提示第三控件不存在
    问题-[DelphiXE2]编译程序体积大的问题
    问题-[delphi2007、2010]无法二次启动,报EditorLineEnds.ttr被占用,进程一直有bds.exe?
    问题-[VMware Workstation]断电后,重启电脑,之后就提示“内部错误”
    问题-[Delphi]通过Map文件查找内存地址出错代码所在行
    问题-[WIN8.132位系统]安装Win8.1 遇到无法升级.NET Framework 3.5.1
    问题-[DelphiXE7]新建的安桌模拟器运行程序闪退
    问题-[Delphi]用LoadLibrary加载DLL时返回0的错误
    问题-[Access]“无法打开工作组信息文件中的表 'MSysAccounts'”的问题的解决方法
    教程-Delphi 调用控制面板设置功能
  • 原文地址:https://www.cnblogs.com/leaven/p/1681901.html
Copyright © 2011-2022 走看看