用u-boot引导uclinux

原创 2007年09月25日 18:07:00
        前段时间准备让u-boot支持NAND Flash,最终无果而终,于是决定先放一放,先让uclinux跑起来,给自己点信心再说。参考了网上一些文章后,终于看到了可爱的提示符!
当前配置:
CPU为BF561,软件为uClinux-dist-2007R1.1-RC3,u-boot已写到Nor Flash且可正常启动。
1、解压uClinux-dist-2007R1.1-RC3,用make menuconfig的默认配置生成一个可用的image。最后在images目录下生成的uImage.ext2有3兆。这是一个带文件头的Image,也相当于u-boot的README中所说的uImage。
2、由于我的板子上不带网络功能,只能从串口用loadb下载,但是下载一次要20多分钟(57600),完全是要考验人的耐心。还好有仿真器,就直接在vdsp中将这个image直接写到0x0300 0000这个位置(Memory -> Fill)。
3、关掉vdsp,reset后启动u-boot,用iminfo 0x0300 0000可以看到如下信息
gtw> iminfo 3000000
 
## Checking Image at 03000000 ...
   Image Name:   uClinux Kernel and ext2
   Image Type:   Blackfin Linux Kernel Image (gzip compressed)
   Data Size:    3000041 Bytes = 2.9 MB
   Load Address: 00001000
   Entry Point: 00001000
   Verifying Checksum ... OK
4、用md 0x0300 0000可看到如下信息:
gtw> md 3000000
03000000: 56190527 e820c44f fa81f846 e9c62d00    '..VO. .F....-..
03000010: 00100000 00100000 a9fdeb65 01021005    ........e.......
03000020: 696c4375 2078756e 6e72654b 61206c65    uClinux Kernel a
03000030: 6520646e 00327478 00000000 00000000    nd ext2.........
这就是此Image的文件头,这64个字节也就是对应着如下数据结构:
 
#define IH_MAGIC   0x27051956    /* Image Magic Number       */
#define IH_NMLEN       32   /* Image Name Length        */
 
/*
 * all data in network byte order (aka natural aka bigendian)
 */
 
typedef struct image_header {
     uint32_t ih_magic; /* Image Header Magic Number     */
     uint32_t ih_hcrc; /* Image Header CRC Checksum     */
     uint32_t ih_time; /* Image Creation Timestamp */
     uint32_t ih_size; /* Image Data Size     */
     uint32_t ih_load; /* Data Load Address         */
     uint32_t ih_ep;        /* Entry Point Address      */
     uint32_t ih_dcrc; /* Image Data CRC Checksum */
     uint8_t       ih_os;        /* Operating System         */
     uint8_t       ih_arch; /* CPU architecture         */
     uint8_t       ih_type; /* Image Type          */
     uint8_t       ih_comp; /* Compression Type         */
     uint8_t       ih_name[IH_NMLEN]; /* Image Name      */
} image_header_t;
用iminfo显示也就是这个结构体的内容。
5、用bootm 3000000引导时出现如下提示:
gtw> bootm 3000000
## Booting image at 03000000 ...
   Image Name:   uClinux Kernel and ext2
   Image Type:   Blackfin Linux Kernel Image (gzip compressed)
   Data Size:    3000041 Bytes = 2.9 MB
   Load Address: 00001000
   Entry Point: 00001000
   Verifying Checksum ... OK
   Uncompressing Kernel Image ... OK
Starting Kernel at = 1000
Linux version 2.6.19.3-ADI-2007R1.1-svn (wmz@localhost.localdomain) (gcc 鐗堟湰
 4.1.1 (ADI 07R1)) #2 Tue Sep 25 11:24:43 CST 2007
Warning: limiting memory to 53MB due to hardware anomaly 05000263
Blackfin support (C) 2004-2007 Analog Devices, Inc.
Compiled for ADSP-BF561 Rev 0.3
Blackfin Linux support by http://blackfin.uclinux.org/
Processor Speed: 600 MHz core clock and 60 Mhz System Clock
Board Memory: 64MB
Kernel Managed Memory: 64MB
Memory map:
 text      = 0x00001000-0x000b0db0
 init      = 0x000b1000-0x000bd23c
 data      = 0x000bf1b8-0x000e5588
 stack     = 0x000c0000-0x000c2000
 bss       = 0x000e5590-0x000f14d8
 available = 0x000f14d8-0x03500000
 rootfs    = 0x03500000-0x03f00000
 DMA Zone = 0x03f00000-0x04000000
Instruction Cache Enabled
Data Cache Enabled (write-through)
Hardware Trace Enabled
Built 1 zonelists. Total pages: 13462
Kernel command line: root=/dev/mtdblock0 rw console=ttyBF0,57600 init=/sbin/init
 
Configuring Blackfin Priority Driven Interrupts
PID hash table entries: 256 (order: 8, 1024 bytes)
Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)
Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)
Physical pages: 3500
Memory available: 52668k/64771k RAM, (48k init code, 703k kernel code, 47k data,
 1024k dma)
Blackfin Scratchpad data SRAM: 4 KB
Blackfin DATA_A SRAM: 16 KB
Blackfin DATA_B SRAM: 16 KB
Blackfin Instruction SRAM: 16 KB
Security Framework v1.0.0 initialized
Capability LSM initialized
Mount-cache hash table entries: 512
Blackfin GPIO Controller
Blackfin DMA Controller
ezkit_init(): registering device resources
BF561 Core B driver v0.1 initialized.
io scheduler noop registered
io scheduler anticipatory registered (default)
io scheduler cfq registered
Serial: Blackfin serial driver
bfin-uart.1: ttyBF0 at MMIO 0xffc00400 (irq = 35) is a BFIN-UART
RAMDISK driver initialized: 16 RAM disks of 4096K size 1024 blocksize
uclinux[mtd]: RAM probe address=0x3500000 size=0xa00000
Creating 1 MTD partitions on "RAM":
0x00000000-0x00a00000 : "ROMfs"
uclinux[mtd]: set ROMfs:EXT2 to be root filesystem
VFS: Mounted root (ext2 filesystem).
Freeing unused kernel memory: 48k freed (0xb1000 - 0xbc000)
dma_alloc_init: dma_page @ 0x000b8000 - 256 pages at 0x03f00000
No usable address families found.
socket: Function not implemented
Unable to create socket
Unable to create socket
Unable to create socket
 
Welcome to:
       ____ _ _
      / __| ||_|             _ _
 _   _| | | | _ ____ _   _ / // /
| | | | | | || | _ /| | | | / /
| |_| | |__| || | | | | |_| | / /
| ___/____|_||_|_| |_|/____|/_//_/
|_|
 
For further information see:
http://www.uclinux.org/
http://blackfin.uclinux.org/
 
 
 
BusyBox v1.4.1 (2007-09-25 11:26:44 CST) Built-in shell (msh)
Enter 'help' for a list of built-in commands.
 
root:~> Unable to create socket
Unable to create socket
6、关闭与网络有关的选项后一切OK!
7、最后一步:将uclinux映象写入NorFlash,设置u-boot的环境变量
setenv ramboot bootm 20030000
复位后自动引导进入uclinux的提示符。
 
版权声明:本文为博主原创文章,未经博主允许不得转载。

uClinux启动过程

uCinux的启动主要经历三个阶段。首先,必须完成CPU和存储器的硬件初始化,在系统RAM中建立程序堆栈和数据段,建立程序的运行时的环境。初始化完成之后,uClinux内核就取得了CPU的控制权,开始...
  • hitlerisyou
  • hitlerisyou
  • 2007年12月20日 18:12
  • 3109

移植uClinux内核到stm32f407

上一篇博文讲到了先移植基于stm32f407的u-boot,本文讲到的是最难的移植stm32f407的内核,这个内核源代码我也是在网上找到了,看介绍是国外大神所修改而成的,真的万分感谢这位大神可怜,所...
  • jccg89104
  • jccg89104
  • 2017年03月20日 14:58
  • 3825

uboot引导uclinux过程分析-基于blackfin

  • 2008年02月20日 10:07
  • 8KB
  • 下载

STM32F429i-Discovery 移植并成功跑起来u-boot 2016.05

说是移植,其实就是编译,不管怎样,u-boot 2016.05已经成功的支持stm32f429i-Discovery了!!因为我在编译最新的Linux 4.5内核时,发现已经支持:stm32f429i...
  • tcjy1000
  • tcjy1000
  • 2016年05月22日 16:14
  • 4536

uClinux的一些点

uClinux内核简介 uCLinux 是Linux 2.0核心的分支,是针对没有MMU管理单元的微控制器 继承了Linux的大多数特性 多数的Linux下应用程序和驱动程序都可以在...
  • shaoshaoh
  • shaoshaoh
  • 2008年01月23日 15:16
  • 1750

uclinux 与 linux的区别

第一篇 这两天看公司的一个产品 用的是arm7 系统用的uclinux 发现程序的内存管理方面有些看不懂,还有程序几乎用的全是线程。查过资料后才恍然明白,原来没有mmu 所以uclinux对多进...
  • bytxl
  • bytxl
  • 2015年12月12日 17:25
  • 1033

ucos 和uclinux的区别及各自的特点

uc/os和uclinux操作系统是两种性能优良源码公开且被广泛应用的的免费嵌入式操作系统,可以作为研究实时操作系统和非实时操作系统的典范。本文通过对uc/os和uclinux的对比,分析和总结了嵌入...
  • jc70100322
  • jc70100322
  • 2016年01月20日 19:17
  • 1759

终于将uClinux移植于fpga成功

刚刚上传图片失败,重来 历时两个星期,终于将uClinux移植于nios ii成功;激动的心情难以掩饰,高兴的同时,我希望记录下我的移植坎坷之旅:    首先我是按照真 OO无双的博客一...
  • frank_wff
  • frank_wff
  • 2014年12月24日 13:23
  • 921

编译uclinux下的应用程序和内核模块

编译uclinux下的应用程序和内核模块   目        录 编译uclinux下的应用程序和内核模块... 1 目       录... 1 实验环境... 1 编译应用程序的正确方法.....
  • pseraph
  • pseraph
  • 2013年08月23日 22:19
  • 1261

Linux和uClinux比较分析

标准Linux是针对有MMU的处理器设计的。在这种处理器上,虚拟地址被送到MMU,把虚拟地址映射为物理地址。通过赋予每个任务不同的虚拟-物理地址转换映射,支持不同任务之间的保护。 AD:51CTO学...
  • vigour1000
  • vigour1000
  • 2014年04月07日 10:49
  • 546
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用u-boot引导uclinux
举报原因:
原因补充:

(最多只允许输入30个字)