The ao68000 IP Core is capable of booting the Linux kernel (http://www.kernel.org) up to the init
program search.
In order to test the ao68000 processor by booting the Linux kernel, a System-on-Chip is prepared and located at: ./tests/soc_for_linux_on_terasic_de2_70/verilog/
. The system consists of:
./configure --prefix=(build prefix) --target=m68knommu-none-linux
make
make install
./../gcc-4.4.3/configure --prefix=(build prefix) --target=m68knommu-none-linux --disable-threads --disable-shared --disable-libmudflap --disable-libssp --disable-libiberty --disable-zlib --disable-libgomp
make
make install
./tests/soc_for_linux_on_terasic_de2_70/software/linux-2.6.33.1-ao68000/
into the Linux kernel sources directory,make menuconfig ARCH=m68knommu CROSS_COMPILE=(build prefix)/bin/m68knommu-none-linux-
make ARCH=m68knommu CROSS_COMPILE=(build prefix)/bin/m68knommu-none-linux-
(build prefix)//bin/m68knommu-none-linux-objcopy -O binary vmlinux vmlinux.bin
soc_for_linux
with the Altera Quartus II tool. The instructions to perform the synthesis are located in the makefile located at: ./Makefile
,./tests/soc_for_linux_on_terasic_de2_70/sd_card/sector0.dat
: dd if=sector0.dat of=/dev/(SD card device)
This file contains the SSP and PC values read by the ao68000 processor after booting.dd if=vmlinux.bin of=/dev/(SD card device) bs=1024 seek=1
./init/initramfs.c
compiled with the GCC option -m68000
contains illegal code to execute on a MC68000 (copy a long word from an unaligned address). Even after correcting this problem, the kernel did not want to boot reliably (sometimes it booted and found the init program, sometimes not).The output of the running kernel is presented below:
Linux version 2.6.33.1 (alek@gesserit) (gcc version 4.4.3 (GCC) ) #11 Sun Mar 21 13:47:14 CET 2010 AO68000 support Aleksander Osman <alfik@poczta.fm> uClinux/AO68000 Flat model support (C) 1998,1999 Kenneth Albanowski, D. Jeff Dionne Built 1 zonelists in Zone order, mobility grouping off. Total pages: 254 Kernel command line: PID hash table entries: 16 (order: -6, 64 bytes) Dentry cache hash table entries: 1024 (order: 0, 4096 bytes) Inode-cache hash table entries: 1024 (order: 0, 4096 bytes) Memory available: 400k/1024k RAM, (492k kernel code, 74k data) Hierarchical RCU implementation. RCU-based detection of stalled CPUs is enabled. NR_IRQS:32 console [ttyDE20] enabled Calibrating delay loop... 6.55 BogoMIPS (lpj=32768) Mount-cache hash table entries: 512 Switching to clocksource jiffies Freeing unused kernel memory: 20k freed (0x81000 - 0x85000) Warning: unable to open an initial console. Kernel panic - not syncing: No init found. Try passing init= option to kernel. Stack from 000c6f9a: 000c6fca 0007272a 00077560 00087332 00087332 00000400 000765f6 000c6fd6 00000001 00080fb8 00000698 000765ee 00080ff8 00000752 000765f6 000765ee 000765e4 000765da 000765cf 0008691c 000811f8 00000b00 000862d4 00000dc2 00000000 Call Trace with CONFIG_FRAME_POINTER disabled: [0007272a] [00077560] [00000400] [000765f6] [00000698] [000765ee] [00000752] [000765f6] [000765ee] [000765e4] [000765da] [000765cf] [000811f8] [00000b00] [00000dc2]