linux支持不带mmu的cpu,支持MMU的Linux移植到Spartan3E 500上

这个想法开始于去年。那个时候尝试在V2P Pro上移植,可以通过,但是在spartan3E上移植一直没有通过。直到最近,再次分析的时候,才解决了这个问题。

软件环境EDK10.0.03

Linux host:Cent OS5

移植Linux所需支持包:petalinux

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

February 5th, 2009

出于对成本的考虑,很多地方都会使用到spartan系列的fpga,

从edk9.2开始,提供的软核microblaze已经可以支持MMU了,所以想尝试在xup spartan3e的板子上实现它,并尝试移植Linux上去,而不再是uclinux。

因为据说支持MMU之后的MicroBlaze大小会比之前大一倍,出于对资源的考虑,外设只是单单选择了一个LED灯,以及串口用于输出。

具体的开启MicroBlaze的方式直接添加以下两个参数到mhs文件的MicroBlaze中。

PARAMETER C_USE_MMU = 3

PARAMETER C_MMU_ZONES = 2

还需要把

PARAMETER C_AREA_OPTIMIZED = 1

这个参数删掉,是不兼容的。这个参数的意思是,spartan3E因为资源有限的问题,所以其MicroBlaze使用了面积优化。其实,有面积优化的MicroBlaze内部使用3级流水,而没有面积优化的是5级流水。

但是最后出来的结果却让自己有点失望。因为test mem没有过。而且是很奇怪的方式:

– Entering main() –

Starting MemoryTest for DDR_SDRAM:

Running 32-bit test…PASSED!

Running 16-bit test…FAILED!

Running 8-bit test…FAILED!

– Exiting main() –

也就是说,系统内部链接应该都没有问题,但是在内部优化的地方是有问题的。自己于是开始思考到底哪里有问题呢?

于是新建一个工程,其他什么都没有变,只把 microblaze的面积优化去掉,也不开启MMU支持,然后编译,test mem的结果是一样的。所以这里有问题。难道spartan3e中其microblaze只能使用面积优化?或者说spartan3E上的 microblaze无法MMU?

————————

2009 年3月 24日 晚

今天再次分析这个项目的时候,偶然的机会想要去生成软件的linker,结果跳出了这样的对话框:

WARNING:MDT -  ***********************************************************************

WARNING:MDT -  **                 MicroBlaze - microblaze_0

WARNING:MDT -  ***********************************************************************

WARNING:MDT -  ** Byte and halfword write instructions cannot be used with “spartan3e”

WARNING:MDT -  ** when data cache size is set to less than 4kB.

WARNING:MDT -  ***********************************************************************

Linker Script generated successfully.

然后发现确实为了资源的问题,自己没有给cpu设置很大的cache,按照V2P上自己做通过的例子来说,icache和dcache都设置为2k。但 是从上面的warning明显看出来,在Spartan3E的器件上,dcache一定要设置到4k以上。

经过尝试,最后了的结果是Byte write instructions一定要dcache为8k。icache没有改变,还是2k。这样设置之后,一切正常,Mem test过了。

– Entering main() –

Starting MemoryTest for DDR_SDRAM:

Running 32-bit test…PASSED!

Running 16-bit test…PASSED!

Running 8-bit test…PASSED!

– Exiting main() –

最后的资源为:

Design Summary Report:

Number of External IOBs                          55 out of 232    23%

Number of External Input IOBs                  3

Number of External Input IBUFs              3

Number of LOCed External Input IBUFs      3 out of 3     100%

Number of External Output IOBs                33

Number of External Output DIFFMs            1

Number of LOCed External Output DIFFMs    1 out of 1     100%

Number of External Output DIFFSs            1

Number of LOCed External Output DIFFSs    1 out of 1     100%

Number of External Output IOBs             31

Number of LOCed External Output IOBs     31 out of 31    100%

Number of External Bidir IOBs                 19

Number of External Bidir IOBs              19

Number of LOCed External Bidir IOBs      19 out of 19    100%

Number of BSCANs                          1 out of 1     100%

Number of BUFGMUXs                        5 out of 24     20%

Number of DCMs                            2 out of 4      50%

Number of MULT18X18SIOs                   3 out of 20     15%

Number of RAMB16s                        19 out of 20     95%

Number of Slices                       4564 out of 4656   98%

Number of SLICEMs                    445 out of 2328   19%

Number of LOCed Slices                   62 out of 4564    1%

Number of LOCed SLICEMs               41 out of 445     9%

虽然只有一个外设(8个LED小灯),但是资源还是用的很满了。让人觉得在3E上跑带有MMU支持的系统着实感到吃力,但是成本会很低。接下来自己的系统可以在这个上面移植Linux,而不再是uclinux。

——————————

2009年3月25日 0:25

成功移植了linux到spartan3E的板卡上

以下是启动信息,可以看出这个是linux了,而不是uclinux,包括版本号,以及外设地址都重新映射到虚拟地址上了。

Linux version 2.6.20-uc0(centos@localhost.localdomain) (gcc version 4.1.1) #2 W

ed Mar 25 00:19:41 EDT 2009

setup_cpuinfo: initialising

setup_cpuinfo: No PVR support in CPU.  Using static compile-time info

set_cpuinfo_static: Using static CPU info.

setup_memory: max_mapnr: 0×2000

setup_memory: min_low_pfn: 0×86294

setup_memory: max_low_pfn: 0×88000

On node 0 totalpages: 8192

DMA zone: 64 pages used for memmap

DMA zone: 0 pages reserved

DMA zone: 8128 pages, LIFO batch:0

Normal zone: 0 pages used for memmap

Built 1 zonelists.  Total pages: 8128

Kernel command line:

xps_intc_0_1.00.a INTC at 0×81800000 mapped to 0xFDFFF000

PID hash table entries: 128 (order: 7, 512 bytes)

xps_timer_1_1.00.a TIMER at 0×83C00000 mapped to 0xFDFFE000

disabling early console

Dentry cache hash table entries: 4096 (order: 2, 16384 bytes)

Inode-cache hash table entries: 2048 (order: 1, 8192 bytes)

Memory: 29836k/32768k available

Calibrating delay loop… 49.35 BogoMIPS (lpj=246784)

Mount-cache hash table entries: 512

io scheduler noop registered

io scheduler anticipatory registered

io scheduler deadline registered

io scheduler cfq registered (default)

xgpio0 #0 at 0×81400000 mapped to 0xC2000000 device: 10,185 using IRQ#2

uartlite.0: ttyUL0 at MMIO 0×84000000 (irq = 3) is a uartlite

RAMDISK driver initialized: 16 RAM disks of 8192K size 1024 blocksize

Freeing unused kernel memory: 1426k freed

Mounting proc:

Mounting var:

Populating /var:

Running local start scripts.

Mounting /etc/config:

Populating /etc/config:

flatfsd: Nonexistent or bad flatfs (0), creating new one…

flatfsd: Created 3 configuration files (117 bytes)

Mounting sysfs:

Setting hostname:

uclinux login: root

Password:

BusyBox v1.00 (2009.03.25-04:13+0000) Built-in shell (ash)

Enter ‘help’ for a list of built-in commands.

~ # ls

bin   dev   etc   home  init  lib   mnt   proc  sys   tmp   usr   var

~ #

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值