- 论坛徽章:
- 0
|
回复 7# gvim
ramdisk的大小是严格要求的,在conf/INSTALL文件(该文件由SMDK2410_INSTALL包含进去)中有一句MEMORY_DISK_ROOT_SIZE=6150,它是以512字节的快形式给出,具体的换算是6150*512/1024 = 6150/2 =3075k 稍微大于3m(所以我们在第4步的nbmakefs 的时候 -s参数给的是3m),这里内核本身预留的空间至少要大于后等于nbmakefs产生的ramdisk大小。
这个ramdisk只有3m,如果要制作更大的ramdisk,放更多的东西进去,需要修改2行内核代码,有兴趣咱们再另外说
请问修改哪里的代码?
我现在的程序有了些新的进展。
原来的ramdisk里我忘记添加 /lib下加入动态链接库,导致内核无法启动init。现在我加入库之后,ramdisk超过3M,因此我修改INSTALL文件,将ramdisk修改为5M后,制作ramdisk,并启动运行,这次我得到的信息是:
>> NetBSD/evbarm boot2440, revision 1.0 (Sun Jul 15 11:13:29 CST 2012)
Argument count: 1
Boot string: 30a00000
val = 29282b2a, DM9000 Chip not found
suppose it runs in qemu, run all the same
begin open tftp file, add by prife 2012/07/14 17:42:51
Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
2006, 2007, 2008, 2009, 2010, 2011, 2012
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 6.0_BETA2 (MY_2440) #1: Wed Jul 18 15:31:44 CST 2012
prife@smart:/usr/src/sys/arch/evbarm/compile/MY_2440
total memory = 65536 KB
avail memory = 56456 KB
mainbus0 (root)
cpu0 at mainbus0: ARM920T rev 0 (ARM9TDMI core)
cpu0: DC enabled IC enabled WB enabled EABT
cpu0: 16KB/32B 64-way Instruction cache
cpu0: 16KB/32B 64-way write-back-locking-A Data cache
ssio0 at mainbus0: fclk 405 MHz hclk 101 MHz pclk 50 MHz
ohci0 at ssio0 intr 26
ohci0: OHCI version 0.0
ohci0: unsupported OHCI revision
ohci0: init failed, error=4
sscom0 at ssio0 unit 0
sscom0: console (major=104)
ssextio0 at ssio0
dme0 at ssextio0 addr 0x20000300 intr 7
dme0: Unable to get mac-address property
lcd0 at ssio0
s3c_lcd_write: attempt to enable LPC3600
wsdisplay0 at lcd0
lcd0: Allocating LCD frame buffer of size 153600
sssdi0 at ssio0
sdmmc0 at sssdi0
ssiis0 at ssio0
udassio0 at ssiis0
audio0 at udassio0: half duplex, playback, capture
sstouch0 at ssio0
wsmouse0 at sstouch0 mux 0
ssrtc0 at ssio0: RTC
clock: hz=100 stathz = 64 PCLK=50625000 prescaler=2 tc=24719
boot device: <unknown>
root on md0a dumps on md0b
root file system type: ffs
warning: no /dev/console
panic: init died (signal 0, exit 11)
Stopped in pid 1.1 (init) at c0218d3c: mov r15, r14
db>
另外,查看 嵌入程序的动态链接库可以使用这个方法:
arm--netbsdelf-readelf -d init
prife@smart:~/work/ramdisk$ arm--netbsdelf-readelf -d sbin/init
Dynamic section at offset 0x442c contains 20 entries:
Tag Type Name/Value
0x00000001 (NEEDED) Shared library: [libutil.so.7]
0x00000001 (NEEDED) Shared library: [libcrypt.so.1]
0x00000001 (NEEDED) Shared library: [libc.so.12]
0x0000000f (RPATH) Library rpath: [/lib]
0x0000000c (INIT) 0x8f78
0x0000000d (FINI) 0xbb44
0x00000004 (HASH) 0x8134
0x00000005 (STRTAB) 0x89a0
0x00000006 (SYMTAB) 0x83c0
0x0000000a (STRSZ) 815 (bytes)
0x0000000b (SYMENT) 16 (bytes)
0x00000015 (DEBUG) 0x0
0x00000003 (PLTGOT) 0x144f4
0x00000002 (PLTRELSZ) 576 (bytes)
0x00000014 (PLTREL) REL
0x00000017 (JMPREL) 0x8d38
0x00000011 (REL) 0x8cd0
0x00000012 (RELSZ) 104 (bytes)
0x00000013 (RELENT) 8 (bytes)
0x00000000 (NULL) 0x0
prife@smart:~/work/ramdisk$
这样就可以在主机上查看了,并且可以编写一个脚本,自动对ramdisk文件夹下所有可执行文件调用上面的命令,将输出保存成一个文件 libraw.txt,然后再使用
grep "Shared library" libraw.txt
取出所有共享库的行,然后再用 sort -u 删除重复的行,
0x00000001 (NEEDED) Shared library: [libbz2.so.1] >
0x00000001 (NEEDED) Shared library: [libcrypt.so.1]
0x00000001 (NEEDED) Shared library: [libc.so.12]
0x00000001 (NEEDED) Shared library: [libc.so.6]
0x00000001 (NEEDED) Shared library: [libcurses.so.7] >>
0x00000001 (NEEDED) Shared library: [libedit.so.3]
0x00000001 (NEEDED) Shared library: [libipsec.so.3]
0x00000001 (NEEDED) Shared library: [libkvm.so.6]
0x00000001 (NEEDED) Shared library: [liblzma.so.1]
0x00000001 (NEEDED) Shared library: [libm.so.0]
0x00000001 (NEEDED) Shared library: [libprop.so.1]
0x00000001 (NEEDED) Shared library: [librt.so.1] >>
0x00000001 (NEEDED) Shared library: [librumpclient.so.0]
0x00000001 (NEEDED) Shared library: [libterminfo.so.1]
0x00000001 (NEEDED) Shared library: [libutil.so.7]
0x00000001 (NEEDED) Shared library: [libz.so.1] |
|