前段时间上网的时候无意中看到了国内的一个开源项目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 -n '.' 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,6 +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,7 +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,还有更多的东西需要研究。
关键字:mini2440
引用地址:
MaxWit及其中的g-bios 在mini2440的初次使用
推荐阅读最新更新时间:2026-03-19 15:03
s3c2440裸机开发调试环境(MDK4.72,Jlink v8,mini2440)
我的开发环境:windows 7 32位,J-linkv8,mini2440开发板一块。最后选择了:MDK4.72版本,J-ink v8的当前最新版本J-linkARM v4.94。 1)打开Keil uVision4新建一个工程: 2)新建一个目录用于存放我们的工程文件,这样我用新建一个test目录:并且取工程名为test并保存: 3)接下来选择CUP database:我们选择samsung的S3C2440A,点击OK;之后会出现第二个图问你是否拷贝'S3C2440.s'到工程文件夹并加入到工程里,S3C2440.s是启动代码我们选择YES 4)然后我们需要对S3C2440.s进行一些
[单片机]
MINI2440从SD卡更新NK及nboot(一)
买了友善 MINI2440 开发板, SuperVivi 不开源,自己的板子又没有 NOR Flash ,烧入系统带来很大的困扰,无奈之下,只能自己做烧入工具来解决。大致思路,先从 SD 卡启动 WINCE ,再用工具格式化 Flash 及分区,将 Nboot 及 NK 写入相应的块。 应用程序操作 Flash ,无非就是 Read/Write/Earse Flash , CSDN 上有一牛人写 在 WinCE 下,应用程序直接读 / 写 / 擦除 flash 设备的方法 。 下面是我的部分代码: 1 BOOL FMD_OEMIoControl(DWORD dwIoControlCode, PBYTE pInBu
[单片机]
Qt-embedded-linux-opensource-src-4.5.1移植到mini2440开发板技术说明
用过友善之臂的朋友都知道,友善之臂mini2440内置的是qt2的界面设计,但是现在q4逐渐成为主流。如何把qt4成功移植到mini2440非常不容易,本人也费了很到的功夫才完成了这样的工程。现在我把自己的经验拿出来与大家分享,希望有兴趣的朋友少走弯路。 1.我的环境及所需资源: PC机操作系统: Ubuntu 交叉编译工具:arm-linux-gcc-4.3.2.tar.gz 所需资源: tslib-1.4.tar.gz qt-embedded-linux-opensource-src-4.5.1.tar.gz qt-x11-linux-opensource-src-4.5.1.tar.gz 2.安装
[单片机]
Mini2440 按键驱动程序学习笔记
参考了友善之臂的按键驱动程序和韦东山写的《嵌入式Linux应用开发完全手册》【下载见 http://www.linuxidc.com/Linux/2011-01/31114.htm 】一书的第20章—Linux异常处理体系结构部分的按键驱动程序,修改了部分内容,学习了嵌入式Linux下按键驱动程序。 按照习惯,先看原理,对所学习的知识结构有了大致的了解了开始阅读别人的代码,仔细分析代码实现的每个过程。由于时间有限,我只了解了一些概念性的理论和内核代码中部分数据结构,学习的过程还有待深入。对于我这样的初学者来说,想把资料中所介绍的每个原理和具体的实现方法都完全掌握,恐怕不止是时间的问题,我所追求的是一种快速上手的方法,先学会用再深入
[单片机]
mini2440 移植 Java虚拟机的错误处理
大都数朋友都会以下面这篇文摘《移植Java虚拟机到mini2440》http://www.linuxidc.com/Linux/2011-08/41912.htm 作为参考,不过里面有几个错误: 首先,在 “ 修改 segvhandler_arch.c 文件 gedit ../../src/linux-arm/javavm/runtime/segvhandler_arch.c 修改 #define ucontext asm_ucontext #include 为 //#define ucontext asm_ucontext //注释掉这句 #include //去掉arm/ ”
[单片机]
使用USB无线网卡和USB摄像头打造mini2440无线监控系统
一、我的mini2440开发板上使用的网卡设备为水星MERCURY54M无线USB网卡 MW54U ver:7.0,其内部芯片型号为ATHEROS的ar9271。mini2440的自带linux系统里面是没有这个驱动程序的,但是在官网上usb-wifi-kits-for-mini2440-linux-2.6.32.2-20100728.tar.gz这个安装包里面是有ar9271这个驱动的。 所以首先就得,先把usb-wifi-kits-for-mini2440-linux-2.6.32.2-20100728.tar.gz这个压缩包拷贝到mini2440的linux系统中,然后直接在根系统下面解压缩,使用以下命令: #tar -xz
[单片机]
MINI2440 QEMU 的 eCos 启动分析
1.总览一下eCos的启动方式 eCos目前默认的启动方式有三种,RAM,ROM,ROMRAM。 RAM启动的意思就是直接在RAM中运行,这种方式一般用于调试,不做必要的硬件初始化。 ROM启动方式的意思是在ROM中直接运行,当然一定要支持XIP的NORFLASH才可以。 ROMRAM的启动方式的意思是,ROM中开始运行然后把所有的代码复制到RAM中继续运行。 2.Mini2440 QEMU的启动方式的选择 MINI2440中目前还没有实现NOR和NAND Flash,(虽然NAND的代码加了,但是里面注名工作不是很正常,我姑且认为不能用吧) 所以,我们必须在RAM中运行eCos,并且还要完成硬件的初始化任务,这也就有了接下
[单片机]
eCos DM9000网卡在MINI2440 QEMU的测试
1. 中断部分的修改 加入中断配置,严格按照原来的架构。 相关阅读: Redboot 的DM9000 网卡驱动在 MINI2440平台的移植 http://www.linuxidc.com/Linux/2011-03/33439.htm ricky@ricky-laptop:/opt/ecos/ecos-hg$ hg diff diff -r 62c4efcc7b5b packages/devs/eth/arm/mini2440/current/include/mini2440_eth_driver.inl --- a/packages/devs/eth/arm/mini2440/current/include/mini2440
[单片机]