APC8750にNetBSD/evbarmを移植するための記録 8/31
2014/09/01(月) 21:42 未分類 はてブ情報 はてブに登録 はてブ数

NetBSDも7.99.1になったので動くか試してみようと思い立つ。

wmt_com.cのコンパイルでコケるので、ほかのcomドライバをまねてこんなパッチ。
diff --git a/arm/wmt/wmt_com.c b/arm/wmt/wmt_com.c
index 939b60c..09e9258 100644
--- a/arm/wmt/wmt_com.c
+++ b/arm/wmt/wmt_com.c
@@ -134,8 +134,17 @@ dev_type_tty(wmtcomtty);
 dev_type_poll(wmtcompoll);

 const struct cdevsw wmtcom_cdevsw = {
-       wmtcomopen, wmtcomclose, wmtcomread, wmtcomwrite, wmtcomioctl,
-       wmtcomstop, wmtcomtty, wmtcompoll, nommap, ttykqfilter, D_TTY
+       .d_open = wmtcomopen,
+       .d_close = wmtcomclose,
+       .d_read = wmtcomread,
+       .d_write = wmtcomwrite,
+       .d_ioctl = wmtcomioctl,
+       .d_stop = wmtcomstop,
+       .d_tty = wmtcomtty,
+       .d_poll = wmtcompoll,
+       .d_mmap = nommap,
+       .d_kqfilter = ttykqfilter,
+       .d_flag = D_TTY
 };

 struct consdev wmtcomcons = {
無事に起動しましたとさ。
NetBSD/evbarm (APC) booting ...
arm32_bootmem_init: memstart=0, memsize=0x20000000, kernelstart=0x8000
arm32_bootmem_init: kernelend=0x616000
arm32_bootmem_init: adding 64757 free pages: [0x616000..0x1fffffff] (VA 0xc0616000)
arm32_bootmem_init: adding 4 free pages: [0..0x7fff] (VA 0xc0000000)
arm32_kernel_vm_init: 1 L2 pages are needed to map 0x64c000 kernel bytes
arm32_kernel_vm_init: allocating page tables for vectoradd_pages: adding pv 0xc060151c (pa 0x616000, va 0xc0616000, 1 pages) at tail
 kerneladd_pages: appending pv 0xc060c168 (0x618000..0x61bfff) to 0x616000..0x617fff
add_pages: appending pv 0xc06017b0 (0x61c000..0x61dfff) to 0x616000..0x61bfff
 vmadd_pages: appending pv 0xc06017c4 (0x61e000..0x61ffff) to 0x616000..0x61dfff
add_pages: appending pv 0xc06017d8 (0x620000..0x621fff) to 0x616000..0x61ffff
add_pages: appending pv 0xc06017ec (0x622000..0x623fff) to 0x616000..0x621fff
add_pages: appending pv 0xc0601800 (0x624000..0x625fff) to 0x616000..0x623fff
add_pages: appending pv 0xc0601814 (0x626000..0x627fff) to 0x616000..0x625fff
add_pages: appending pv 0xc0601828 (0x628000..0x629fff) to 0x616000..0x627fff
add_pages: appending pv 0xc060183c (0x62a000..0x62bfff) to 0x616000..0x629fff
add_pages: appending pv 0xc0601850 (0x62c000..0x62dfff) to 0x616000..0x62bfff
arm32_kernel_vm_init: allocating stacks
add_pages: appending pv 0xc0601af4 (0x62e000..0x62ffff) to 0x616000..0x62dfff
add_pages: appending pv 0xc0601ae0 (0x630000..0x631fff) to 0x616000..0x62ffff
add_pages: appending pv 0xc0601acc (0x632000..0x633fff) to 0x616000..0x631fff
add_pages: appending pv 0xc0601ab8 (0x634000..0x635fff) to 0x616000..0x633fff
add_pages: appending pv 0xc0601aa4 (0x636000..0x637fff) to 0x616000..0x635fff
add_pages: appending pv 0xc0601b08 (0x638000..0x639fff) to 0x616000..0x637fff
add_pages: appending pv 0xc0601558 (0x63a000..0x63dfff) to 0x616000..0x639fff
Creating L1 page table at 0x00618000
arm32_kernel_vm_init: adding L2 pt (VA 0xc0616000, PA 0x616000) for VA 0xffff0000
 (vectors)arm32_kernel_vm_init: adding L2 pt (VA 0xc061c000, PA 0x61c000) for VA 0xc0000000 (kernel)
arm32_kernel_vm_init: adding L2 pt (VA 0xc061e000, PA 0x61e000) for VA 0xc1000000 (vm)
arm32_kernel_vm_init: adding L2 pt (VA 0xc0620000, PA 0x620000) for VA 0xc1800000 (vm)
arm32_kernel_vm_init: adding L2 pt (VA 0xc0622000, PA 0x622000) for VA 0xc2000000 (vm)
arm32_kernel_vm_init: adding L2 pt (VA 0xc0624000, PA 0x624000) for VA 0xc2800000 (vm)
arm32_kernel_vm_init: adding L2 pt (VA 0xc0626000, PA 0x626000) for VA 0xc3000000 (vm)
arm32_kernel_vm_init: adding L2 pt (VA 0xc0628000, PA 0x628000) for VA 0xc3800000 (vm)
arm32_kernel_vm_init: adding L2 pt (VA 0xc062a000, PA 0x62a000) for VA 0xc4000000 (vm)
arm32_kernel_vm_init: adding L2 pt (VA 0xc062c000, PA 0x62c000) for VA 0xc4800000 (vm)
Mapping kernel
arm32_kernel_vm_init: adding chunk for kernel text 0x8000..0x201fff (VA 0xc0008000)
add_pages: adding pv 0xc0601508 (pa 0x8000, va 0xc0008000, 253 pages) before pa 0x616000
arm32_kernel_vm_init: adding chunk for kernel data/bss 0x202000..0x615fff (VA 0xc0202000)
add_pages: appending pv 0xc0601580 (0x202000..0x615fff) to 0x8000..0x201fff
add_pages: merging pv 0xc060151c (0x616000..0x63dfff) to 0x8000..0x615fff
Listing Chunks
arm32_kernel_vm_init: pv 0xc0601508: chunk VA 0xc0008000..0xc063dfff (PA 0x8000, prot 3, cache 1)

Mapping Chunks
arm32_kernel_vm_init: mapping last chunk VA 0xc0008000..0xc063dfff (PA 0x8000, prot 3, cache 1)
pmap_map_chunk: pa=0x8000 va=0xc0008000 size=0x636000 resid=0x636000 prot=0x3 cache=1
PPPPLLLLLLLLLLLLLLLSSSSSLLLPPPPPPP
devmap: d8000000 -> d8ffffff @ fe000000
pmap_map_chunk: pa=0xd8000000 va=0xfe000000 size=0x1000000 resid=0x1000000 prot=0x3 cache=0
sS
                             Physical              Virtual        Num
                       Starting    Ending    Starting    Ending   Pages
               SDRAM: 0x00000000 0x1fffffff 0xc0000000 0xdfffffff 65536
        text section: 0x00008000 0x00201fff 0xc0008000 0xc0201fff 253
        data section: 0x00210000 0x00600e00 0xc0210000 0xc0600e00 505
         bss section: 0x00600e00 0x006145f8 0xc0600e00 0xc06145f8 11
   L1 page directory: 0x00618000 0x0061bfff 0xc0618000 0xc061bfff 2
   ABT stack (CPU 0): 0x0062e000 0x0062ffff 0xc062e000 0xc062ffff 1
   FIQ stack (CPU 0): 0x00630000 0x00631fff 0xc0630000 0xc0631fff 1
   IRQ stack (CPU 0): 0x00632000 0x00633fff 0xc0632000 0xc0633fff 1
   UND stack (CPU 0): 0x00634000 0x00635fff 0xc0634000 0xc0635fff 1
  IDLE stack (CPU 0): 0x00636000 0x00637fff 0xc0636000 0xc0637fff 1
           SVC stack: 0x00638000 0x00639fff 0xc0638000 0xc0639fff 1
      Message Buffer: 0x0063a000 0x0063dfff 0xc063a000 0xc063dfff 2
   Exception Vectors: 0x0063e000 0x0063ffff 0xffff0000 0xffff1fff 1
         Free Memory: 0x00640000 0x1fffffff                       64736
         Free Memory: 0x00000000 0x00007fff                       4
TTBR0=0x4000 TTBR1=0 TTBCR=0 CONTEXTIDR=0
switching to new L1 page table @0x618000... ttb (TTBR0=0x618000) OK
nfreeblocks = 2, free_pages = 64740 (0xfce4)
bootstrap done.
vectors 0xffff0000
init subsystems: stacks vectors undefined page pmap_physload pmap kpm locks l1pt cache(l1pt) specials pools [ Kernel symbol table missing! ]
done.
pmap_postinit: Allocated 35 static L1 descriptor tables
Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
    2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014
    The NetBSD Foundation, Inc.  All rights reserved.
Copyright (c) 1982, 1986, 1989, 1991, 1993
    The Regents of the University of California.  All rights reserved.

NetBSD 7.99.1 (APC) #0: Fri Aug 29 17:28:30 UTC 2014
        root@aug:/usr/obj/sys/arch/evbarm/compile/APC
total memory = 512 MB
avail memory = 500 MB
sysctl_createv: sysctl_create(machine_arch) returned 17
kern.module.path=/stand/evbarm/7.99.1/modules
mainbus0 (root)
cpu0 at mainbus0 core 0: ARM1176JZ-S r0p7 (ARM11J V6ZK core)
cpu0: DC enabled IC enabled WB enabled LABT
cpu0: 16KB/32B 4-way L1 VIPT Instruction cache
cpu0: 16KB/32B 4-way write-back-locking-C L1 VIPT Data cache
vfp0 at cpu0: VFP11, rounding, exceptions
obio0 at mainbus0
wmicu0 at obio0 addr 0xd8140000-0xd814ffff
wmtmr0 at obio0 addr 0xd8130100-0xd81301ff intr 37 : WMT OS Timer
wmtcom0 at obio0 addr 0xd8200000-0xd820ffff intr 32 : WMT UART
wmtcom0: console
rn_init: radix functions require max_keylen be set
boot device: <unknown>
root on md0a dumps on md0b
mountroot: trying nfs...
mountroot: trying msdos...
mountroot: trying ffs...
root file system type: ffs
WARNING: no TOD clock present
WARNING: using filesystem time
WARNING: CHECK AND RESET THE DATE!
init: copying out flags `-s' 3
init: copying out path `/sbin/init' 11
erase ^?, werase ^W, kill ^U, intr ^C

# ls
.profile        kern            sbin            sysinstmsgs.fr  usr
bin             libexec         sysinst         sysinstmsgs.pl  var
dev             mnt             sysinstmsgs.de  targetroot
etc             mnt2            sysinstmsgs.es  tmp
#
そういえば、6.99.44を動かすために
diff --git a/evbarm/conf/std.apc b/evbarm/conf/std.apc
index d29200b..ee8ec66 100644
--- a/evbarm/conf/std.apc
+++ b/evbarm/conf/std.apc
@@ -15,6 +15,7 @@ options       EXEC_SCRIPT
 options        ARM32
 #options       ARM11_CACHE_WRITE_THROUGH

+options                ARM11_COMPAT_MMU
 #options       __HAVE_CPU_COUNTER
 options        __HAVE_FAST_SOFTINTS            # should be in types.h
 options        KERNEL_BASE_EXT=0xc0000000
とかいう変更もしたのでした。

やっぱり、ちょいちょい最新のソースで動かさないと、原因がわからなくなるからいけませんね。

名前:  非公開コメント   

  • TB-URL  http://www.tokuda.net/diary/0848/tb/