载入中。。。

网志 | 载入中。。。's blog

2006-3-26 11:31:00
linux2.6.11.8在S3C44B0上的运行

linux2.6.11.8在S3C44B0上的运行

 

最近事情很多,人也很懒。完成了《嵌入式系统接口设计与LINUX驱动程序开发》的书稿就不愿意在写什么东西了。今天实验室同学聚会,喝得有点头疼,不干活了,写一遍调试心得吧。

这里,我把题目定为“linux2.6.11.8在S3C44B0上的运行”,而不是“移植”,因为移植的多数工作在
http://opensrc.sec.samsung.com/download.html
已经完成了。当时,只有linux-2.6.11.8-hsc0.patch.gz,是2.6.11.8的补丁,现在去看,还有针对2.6.14的补丁,不过我没有仔细看,不知道对s3c44b0支持的好不好,是不是还有我这里遇到的问题。好了,废话少说,直接说说我用这个补丁在S3C44B0处理器上运行过程、遇到的问题和解决方法吧。

编译器使用的就是上面网站上提供的arm-uclinux-tools-base-gcc3.4.0-20040713,不过这里没有给源码,不知道改了啥东西,反正现在看来编译应用程序和内核都没问题。

首先,补丁打上,编译器安装以后,选择44b0的配置,编译内核,没有啥大问题。可能因为编译不过,需要调整源码的一些地方,这个具体的没啥说的,编译出错了,看看错误,都可以调整过来。下载内核到板子上,运行,解压以后就没有反映了。好在我对ARM7很熟悉,调试工具也多,通过JTAG跟踪,发现问题出在启动处。

修改arch/arm/boot/compressed/head-s3c44b0.S中的call_kernel(280行附近),代码:
  ldr r2, S3C44B0_PROCESSOR_TYPE
  str     r2, [r6]
  ldr     r2, S3C44B0_MACH_TYPE
  str     r2, [r9]
改为:
  ldr r6, S3C44B0_PROCESSOR_TYPE
  ldr     r7, S3C44B0_MACH_TYPE
直接付值。

其实,这一段不是很清楚为什么,感觉好象是程序写错了,在解压缩内核的时候,应该把处理器类型号(S3C44B0_PROCESSOR_TYPE)和板类型号(S3C44B0_MACH_TYPE)保存在r6和r7中的。最后,传递给非压缩内核。

提示:内核启动的时候,在console没有正确初始化之前,控制台(串口)不能输出,为了调试方便,可以在kernel/printk.c中的vprintk前面加入
 putstr(fmt);
直接输出printk打印的字符串。putstr是解压之前,内核输出的宏定义,所以必须
 #i nclude <asm/arch/uncompress.h>
因为是uclinux,没有MMU,直接使用物理地址就可以访问外设,所以,putstr可以直接使用。

然后,需要根据2.6.11.8内核,修改timer挂载方式。
 在arch/arm/mach-s3c44b0x/time.c中,添加

 struct sys_timer s3c44b0x_timer = {
  .init  = s3c44b0x_time_init,
  .offset  = s3c44b0x_gettimeoffset,
  .resume  = s3c44b0x_systimer_setup
 };
 在arch/arm/mach-s3c44b0x/arch.c中,替换
 INITTIME(s3c44b0x_time_init)

 .timer  = &s3c44b0x_timer,

接着很关键的地方就是中断处理。因为ARM7TMDI处理器没有MMU,也不能实现异常向量表的重新映射。在我的bootloader中,异常向量位置有指令:
 add pc, pc, 0xC000000
就是让对应的异常处理,跳转到0xC000000+8的地址处——因为ARM7中3级流水线的影响,所以,实际的跳转地址需要加8。

因此,我们需要修改内核代码,重定向中断向量地址。在arch/arm/kernel/traps.c中函数trap_init负责初始化所有的异常入口,替换
 unsigned long base = (CONFIG_DRAM_BASE);

 unsigned long base = (CONFIG_DRAM_BASE+0x8);
中断才可以用。

至此,内核基本就可以跑起来了。但是,这个不定对S3C44B0的支持太少了。甚至都没有串口驱动程序,而只给了一个查询方式发送的工作的串口作为console。不过这些都好办,在Linux 2.6.11以后的内核,有很好的对S3C2410的支持。S3C2410的很多外设寄存器是和S3C44B0的兼容的。比如:我们很容易就可以利用S3C2410的串口驱动程序在44B0上。

最后,还有一个地方感觉内核也写错了。不知道为什么,这里对44B0还是定义了ARMv3支持的宏。我这个在我几年前,在移植Ne2000驱动程序在44B0上的时候就遇到过,44B0应该使用ARMv4的定义,否则,会影响一些对外设操作的函数。现在,我的板子上用的是DM9000的网卡,必须修改这里,驱动程序才可以正常工作。有了网卡的驱动,就容易调试多了。我们可以使用nfs做root,来调试根文件系统和启动——我太喜欢这种方式了:)

  • 标签:linux 2.6 S3C44B0 
  • 2009-12-21 11:08:00
    Re:linux2.6.11.8在S3C44B0上的运行
    访客vAQd72(游客)三水老师,你好!能不能写篇文章讲移植Linux到s3c44b0x的详细步骤?要是能的话,非常感谢了!
    By 访客vAQd72(游客) | 个人主页 | 引用 | 返回 | 删除 | 回复
    2008-5-6 9:53:00
    Re:linux2.6.11.8在S3C44B0上的运行
    cocodot(游客)三水老师:
    您好!我的毕业设计做的是内核移植(s3c2410),用的是博创的板子。bootloader使用的是vivi,将内核和根文件系统下载下去,启动,显示:uncompressing linux.........done,booting the kernel 然后就 停住了,在网上查了好久的资料也没能解决这个问题,还望您给予指导
    编译vivi使用的交叉编译工具2.95.2,内核使用的是2.6.14.1,编译工具是3.4.1,宿主机系统为Federa8。使用Cramfs格式根文件系统。
    再次感谢您的回答

    以下为blog主人的回复:

    把vivi的Linux启动参数中设置console=ttySAC0

    By cocodot(游客) | 个人主页 | 引用 | 返回 | 删除 | 回复
    2008-2-28 17:45:00
    Re:linux2.6.11.8在S3C44B0上的运行
    tianxiaoxiao(游客)请教一个关于中断向量表的问题。
    异常向量表位置有指令:add pc, pc, 0xC000000。根据这条指令异常中断会跳转到0xC000008的位置上,这个位置上存放的是什么代码,用户自己编写的中断处理程序被映射到这个地方?还是存放系统自己的中断处理函数?
    44b0的一级中断向量表存放在0开始的地址处,在这个地址段中包含了add pc, pc, 0xC000000这条指令。因为异常向量表不能重新映射,那么系统响应中断的过程是不是这样:假设int0被触发,系统就暂停正在运行的程序,转向地址0处的中断向量表去取指,然后按照指令中的跳转地址跳到0xC000008的位置上,然后由这里的程序来处理。对不对?系统响应中断是从0地址处的中断向量表开始执行还是从0xC000008地址处开始。

    以下为blog主人的回复:

    就是你说的过程,中断响应一定要经过0地址然后跳转的。

    By tianxiaoxiao(游客) | 个人主页 | 引用 | 返回 | 删除 | 回复
    2008-2-17 10:38:00
    Re:linux2.6.11.8在S3C44B0上的运行
    qq:47417879(游客)inux version 2.6.14-hsc0 (root@localhost.localdomain) (gcc version 2.8CPU: [44b07700]
    Machine: S3C44B0X Development Board
    Memory management: Non-Paged(unused/noMMU)
    Built 1 zonelists
    Kernel command line: root=/dev/ram0 initrd=0x0c0b4d08,
    154k console-ttyS0,115200
    PID hash table entries: 64 (order: 6, 1024 bytes)
    Dentry cache hash table entries: 2048 (order: 1, 8192 bytes)
    Inode-cache hash table entries: 1024 (order: 0, 4096 bytes)
    Memory: 8MB = 8MB total
    Memory: 7128KB available (816K code, 75K data, 60K init)
    Mount-cache hash table entries: 512
    Linux NoNET1.0 for Linux 2.6
    io scheduler noop registered
    RAMDISK driver initialized: 16 RAM disks of 1024K size 1024 blocksize
    Internal error: Oops - undefined instruction: 0 [#1]

    以下为blog主人的回复:

    把ramdisk去掉试试?

    By qq:47417879(游客) | 个人主页 | 引用 | 返回 | 删除 | 回复
    2008-1-10 15:43:00
    2.6.14编译错误,求教
    qq:47417879(游客)按照刘老师指点的加如puts函数。下面是我打印的信息。内核启动个开始就死掉了。。
    <5>Linux version 2.6.14-hsc0 (root@localhost.localdomain) (gcc version 3.4.3) #1
    0 Thu Jan 10 15:34:12 CST 2008
    CPU: %s [%08x]
    Machine: %s
    Memory management: Non-Paged(unused/noMMU)
    <7>On node %d totalpages: %lu
    <7> %s zone: %lu pages, LIFO batch:%lu
    <7> %s zone: %lu pages, LIFO batch:%lu
    <7> %s zone: %lu pages, LIFO batch:%lu
    Built %i zonelists
    <5>Kernel command line: %s
    PID hash table entries: %d (order: %d, %Zd bytes)
    By qq:47417879(游客) | 个人主页 | 引用 | 返回 | 删除 | 回复
    2007-9-19 13:33:00
    Re:linux2.6.11.8在S3C44B0上的运行
    qq47417879(游客)请教哈!
    好像2.6内核带的44b0串口不能用啊!
    要自己写吗?
    有地方下载吗?

    以下为blog主人的回复:

    文章中说了,用2410的基本就可以。寄存器都是兼容的。

    By qq47417879(游客) | 个人主页 | 引用 | 返回 | 删除 | 回复
    2007-9-17 16:08:00
    Re:linux2.6.11.8在S3C44B0上的运行
    1234(游客)编译成功之后
    下载文件到板子上,始终无法引导成功,串口没有反应。。
    能否赐教哈那里出了问题。。
    我个人修改了
    时钟 40保持和uboot一直
    引导地址 0x0c008000
    中断向量地址,按照刘淼的一个文章上修改的trap.c中,unsigned long base = (CONFIG_DRAM_BASE+0x8);
    还可能是那里出了问题呢?

    以下为blog主人的回复:

    可以启动,串口可以输出,就一点点的跟踪内核吧。44b0没有MMU,随时可以串口输出。不用考虑映射的问题。

    至少,内核的自解压没问题吧?如果这里都不行,那....就看看你的串口输出函数了。

    By 1234(游客) | 个人主页 | 引用 | 返回 | 删除 | 回复
    2007-7-29 21:31:00
    Re:linux2.6.11.8在S3C44B0上的运行
    grant(游客)最后走到generic_make_request()的
    printk("%s:%d, %p,q=%p, __make_request= %p, bio=%p \n", __FUNCTION__, __LINE__, q->make_request_fn, __make_request, q, bio);
    打印generic_make_request:3003, 0c0c5058,q=0c0b9818, __make_request= 0c1dee10, bio=0c1be3b4
    ret = q->make_request_fn(q, bio);死了打印信息
    Internal error: Oops - undefined instruction: 0 [#1]
    CPU: 0
    pc : [<0c0218bc>] lr : [<0c0c4d78>] Not tainted
    sp : 0c197c58 ip : 00000000 fp : 0c197c70
    r10: 00000000 r9 : 0c1bf27c r8 : 00000000
    r7 : 00000000 r6 : 0c164ee0 r5 : 0c1f93ec r4 : 0c1f93ec
    r3 : 00000021 r2 : 60000013 r1 : 00000000 r0 : 00000000
    Flags: nZCv IRQs on FIQs on Mode SVC_32 Segment user
    Process swapper (pid: 1, stack limit = 0x0c196194)
    Stack: (0x0c197c58 to 0x0c198000)
    7c40: 0c164ee0 00000400
    7c60: 00000000 0c197ca8 0c197c74 0c0c4f44 0c0c4cd8 00000000 0c191cfc 00000000
    7c80: 0c1bf27c 00000000 0c1be3b4 00000000 00000000 0c191cfc 00000000 0c197cd4
    7ca0: 0c197cac 0c0c50d8 0c0c4ecc 00000000 0c1dee10 0c1be3b4 0c1def00 0c1dee10
    7cc0: 00000000 0c197d08 0c197d50 0c197cd8 0c0ba30c 0c0c5068 0c0b9818 0c1dee10
    7ce0: 0c1be3b4 00000000 0c193cc0 0c03a00c 0c197d04 0c197d04 00000000 0c193cc0
    7d00: 0c03a00c 0c197d04 0c197d04 00000000 00000000 00000000 00000001 00000000
    7d20: 0c09a5d8 0c197d40 0c197d34 0c1be3b4 00000000 00000000 00000000 00000001
    7d40: 0c09a5d8 0c197d88 0c197d54 0c0ba3e0 0c0ba0d8 00000000 0c1f93ec 0c1f93ec
    7d60: 00000000 00000000 00000001 0c197d88 0c197d7c 0c1be3b4 0c1f93ec 0c197da8
    7d80: 0c197d8c 0c054748 0c0ba344 0c1f93ec 0c191bf8 0c1cb268 00008001 0c197dbc
    7da0: 0c197dac 0c052014 0c0545c8 0c1cb268 0c197dcc 0c197dc0 0c052328 0c051fa0
    7dc0: 0c197df0 0c197dd0 0c09a638 0c052310 0c191c14 0c191bf8 0c1cb268 00008001
    7de0: 00000000 0c197e38 0c197df4 0c057618 0c09a5e8 306d6172 0c1f6000 00000000
    7e00: 00000000 00000000 00008001 0c197e28 0c197e1c 0c14aba8 00008001 0c1f6000
    7e20: 00000000 00000000 00008001 0c197e5c 0c197e3c 0c09b334 0c057424 0c09a5d8
    7e40: 0c1843e8 0c14aba8 fffffff4 0c1f6000 0c197e84 0c197e60 0c0578c0 0c09b2f8
    7e60: 0c1f4000 00008001 00000000 0c197eb0 00000000 0c1f4000 0c197ea4 0c197e88
    7e80: 0c06dc4c 0c057858 00008001 00000000 0c1f6000 00000000 0c197f14 0c197ea8
    7ea0: 0c06e2b4 0c06dbcc 0c1f6000 00000000 0c1906e4 0c1845f8 0c19d960 0c1f5000
    7ec0: 0c134b74 00000001 00000001 00000000 00000000 0c134b74 0c197ef4 0c197ee8
    7ee0: 0c042424 00001000 0c197f14 0c197ef8 00000000 0c1f5000 0c134b74 00000000
    7f00: 00008001 0c134b74 0c197f48 0c197f18 0c06e6b0 0c06e164 00000000 00000000
    7f20: 0c1f6000 0c1f4000 00000000 0c18d000 0c18d000 00008001 0c197f64 0c197f60
    不知这个函数指针调用的什么函数导致死了。

    以下为blog主人的回复:

    你可以吧q->make_request_fn调用的地址打印出来,然后在System.map(编译内核时候生成的地址信息)文件中查找对应的函数。应该有结果。

    By grant(游客) | 个人主页 | 引用 | 返回 | 删除 | 回复
    2007-7-28 22:46:00
    Re:linux2.6.11.8在S3C44B0上的运行
    grant(游客)三水老师:
    linux2.6如何指定romfs 在内存中的加载地址,我的bootloader是很老的那种,叫blob, 不支持initrd, bootloader 传给内核的命令行是"root=/dev/ram0 console=ttyS0 init=/linuxrc",我在setup_arch()中做了这样的修改sprintf(default_command_line, "root=/dev/ram noinitrd ro rootfstype=romfs init=/linuxrc");现在内核跑到加载文件系统romfs时死了。我怀疑是没有指定romfs在内存中的加载地址所导致的。在2.4的内核在文件drivers/block/blkmem.c中可以这样指定
    #ifdef CONFIG_BOARD_MBA44
    {0, 0x0cc00000, -1},
    #endif
    linux2.6内核怎么指定呢?非常感谢您的指点。

    以下为blog主人的回复:

    2.6内核下,如何用ramdisk,我也没有试过。如果你觉得是因为根文件系统搞不定,可以尝试网络文件系统做根,或者,用jffs2。这两种我都比较熟悉,也不算难。当然,ram没有道理不好用的,那应该是最简单的方法吧,呵呵

    By grant(游客) | 个人主页 | 引用 | 返回 | 删除 | 回复
    2007-7-18 21:12:00
    Re:linux2.6.11.8在S3C44B0上的运行
    grant(游客)前面的这个错误解决了,就是修改了vector_base为0x0c000008,
    PID hash table entries: 128 (order: 7, 2048 bytes)
    Bad mode in interrupt handler detected: mode IRQ_32
    Internal error: Oops - bad mode: 0 [#1]
    现在新的错误,先是在sysfs_init()那里出错,我没管他,配置的时候选为n,不用sysfs。然后内核出现不稳定现象, 刚烧写的zImage,能正常打印错误信息, 放在一边几分钟不管他, 再加电运行,就死在Uncompressing Linux............................................ done, booting the kernel. 这里不动。这个问题折腾了近半个月,不知什么原因导致不稳定,bootloader从烧也不行。最后发现刘老师的帖子中提到修改arch/arm/boot/compressed/head-s3c44b0.S中的call_kernel(280行附近),代码:
    ldr r2, S3C44B0_PROCESSOR_TYPE
    str r2, [r6]
    ldr r2, S3C44B0_MACH_TYPE
    str r2, [r9]
    改为:
    ldr r6, S3C44B0_PROCESSOR_TYPE
    ldr r7, S3C44B0_MACH_TYPE
    直接付值。
    跟到head-s3c44b0.S果然这里问题,换了汇编这个没了。
    然后内核又运行到proc_root_init();不动重启。注掉proc_root_init();在编译运行出现如下错误
    Uncompressing Linux............................................ done, booting the kernel.
    start kernelLinux version 2.6.14-hsc0 (grant@grant-desktop) (gcc version 3.4.0) #121 Wed Jul 18 21:04:33 CST 2007
    CPU: Samsung-S3C44B0x [44b07700]
    Machine: S3C44B0X Development Board
    Memory management: Non-Paged(unused/noMMU)
    Built 1 zonelists
    Kernel command line:
    ++++++++++++++===VECTORS_BASE = 0xc000008
    PID hash table entries: 128 (order: 7, 2048 bytes)
    Dentry cache hash table entries: 4096 (order: 2, 16384 bytes)
    Inode-cache hash table entries: 2048 (order: 1, 8192 bytes)
    Memory: 16MB = 16MB total
    Memory: 14848KB available (1173K code, 115K data, 72K init)
    Mount-cache hash table entries: 512
    111111111111111
    548++++++++++++++++++
    softlockup thread 0 started up.
    NET: Registered protocol family 16
    DCC: JTAG1 Serial emulation driver driver $Revision: 1.1 $
    ttyJ0 at MMIO 0x12345678 (irq = 0) is a DCC
    io scheduler noop registered
    io scheduler anticipatory registered
    io scheduler deadline registered
    io scheduler cfq registered
    RAMDISK driver initialized: 16 RAM disks of 1024K size 1024 blocksize
    loop: loaded (max 8 devices)
    NET: Registered protocol family 2
    IP route cache hash table entries: 256 (order: -2, 1024 bytes)
    TCP established hash table entries: 1024 (order: 0, 4096 bytes)
    TCP bind hash table entries: 1024 (order: 0, 4096 bytes)
    TCP: Hash tables configured (established 1024 bind 1024)
    TCP reno registered
    TCP bic registered
    NET: Registered protocol family 1
    NET: Registered protocol family 17
    VFS: Cannot open root device "" or unknown-block(0,255)
    Please append a correct "root=" boot option
    Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,255)
    我怀疑是不是Kernel command line: 为空导致的,不知怎么传commandline。谢谢指教。

    以下为blog主人的回复:

    你的根文件系统没有指定吧?到了这里就是根文件系统的事情了。离成功不远了。呵呵

    By grant(游客) | 个人主页 | 引用 | 返回 | 删除 | 回复
    2007-7-7 20:04:00
    to:mybao
    grant(游客)刚才QQ号码写错了。是QQ:623086541
    By grant(游客) | 个人主页 | 引用 | 返回 | 删除 | 回复
    2007-7-7 20:02:00
    to:mybao
    grant(游客)我的QQ:623089541
    交流交流吧,共同找出问题的原因
    By grant(游客) | 个人主页 | 引用 | 返回 | 删除 | 回复
    2007-7-7 12:52:00
    to grant
    mybao(游客)linux2.6.14我也试着移植到44B0上,跟你的情况差不多,也是到local_irq_enable(),就出错了,不知为何。
    而且我在win下调试了,在定时器中断设个断点,中断能进,全速的化到了local_irq_enable(),就出错了。
    By mybao(游客) | 个人主页 | 引用 | 返回 | 删除 | 回复
    2007-7-5 22:53:00
    Re:linux2.6.11.8在S3C44B0上的运行
    grant(游客)在移植linux2.6.14到我的44B0的板子过程中,出现如下错误信息,请前辈们帮我看看是哪里的问题。非常感谢!
    我用打印跟踪调试发现在init/main.c的start_kernel()函数中执行到local_irq_enable();就出现如下的错误信息,第一次移植内核希望大虾们指点迷津。
    Starting kernel ...

    Uncompressing Linux............................................. done, booting the kernel.
    Linux version 2.6.14-hsc0 (grant@grant-desktop) (gcc version 3.4.0) #25 Thu Jul 5 21:43:40 CST 2007
    CPU: Samsung-S3C44B0x [44b07700]
    Machine: S3C44B0X Development Board
    Memory management: Non-Paged(unused/noMMU)
    Built 1 zonelists
    Kernel command line:
    PID hash table entries: 128 (order: 7, 2048 bytes)
    Bad mode in interrupt handler detected: mode IRQ_32
    Internal error: Oops - bad mode: 0 [#1]
    CPU: 0
    pc : [<0c000058>] lr : [<00000001>] Not tainted
    sp : 0c145fa0 ip : 00000000 fp : 0c145ffc
    r10: 00000000 r9 : 0c1527bc r8 : 0c1614b4
    r7 : 000000b2 r6 : 0c1527c0 r5 : 0000000e r4 : 01c00000
    r3 : 60000053 r2 : 00000000 r1 : 0000023b r0 : 0000001f
    Flags: nZCv IRQs off FIQs off Mode IRQ_32 Segment user
    Process swapper (pid: 0, stack limit = 0x0c144194)
    Stack: (0x0c145fa0 to 0x0c146000)
    5fa0: 0000001f 0000023b 00000000 60000053 01c00000 0000000e 0c1527c0 000000b2
    5fc0: 0c1614b4 0c1527bc 00000000 0c145ffc 00000000 0c145fa0 00000001 0c000058
    5fe0: 600000d2 ffffffff 0c0082ac 0c152828 00000000 0c146000 0c300a08 0c0085f8
    Backtrace:
    Function entered at [<0c0085e8>] from [<0c300a08>]
    Code: e3a06007 ea00000c e59fd0d4 e92d0003 (e59f00d0)
    <2>Bad mode in interrupt handler detected: mode IRQ_32
    Internal error: Oops - bad mode: 0 [#2]
    CPU: 0
    pc : [<0c000058>] lr : [<00000001>] Not tainted
    sp : 0c145f34 ip : 00000000 fp : 0c145f88
    r10: 00000000 r9 : 0c1527bc r8 : 0c1614b4
    r7 : 0c1377bc r6 : 00000000 r5 : 0c145fa0 r4 : 0c14746c
    r3 : 60000053 r2 : 00000000 r1 : 000005cb r0 : 0000000b
    Flags: nZCv IRQs off FIQs off Mode IRQ_32 Segment user
    Process swapper (pid: 0, stack limit = 0x0c144194)
    Stack: (0x0c145f34 to 0x0c146000)
    5f20: 0000000b 000005cb 00000000
    5f40: 60000053 0c14746c 0c145fa0 00000000 0c1377bc 0c1614b4 0c1527bc 00000000
    5f60: 0c145f88 00000000 0c145f34 00000001 0c000058 600000d2 ffffffff 0c145f9c
    5f80: 0c145f8c 0c01fc94 0c01f948 0000001f 00000000 0c145fa0 00000001 0c01fc58
    5fa0: 0000001f 0000023b 00000000 60000053 01c00000 0000000e 0c1527c0 000000b2

    以下为blog主人的回复:

    因为没有MMU,中断处理程序的位置需要和bootloader配合。看看这里是不是已经对应上了?

    By grant(游客) | 个人主页 | 引用 | 返回 | 删除 | 回复
    2007-7-5 22:51:00
    Re:linux2.6.11.8在S3C44B0上的运行
    grant(游客)三水老师帮忙看看这个问题,非常感谢!
    在移植linux2.6.14到我的44B0的板子过程中,出现如下错误信息,请前辈们帮我看看是哪里的问题。非常感谢!
    我用打印跟踪调试发现在init/main.c的start_kernel()函数中执行到local_irq_enable();就出现如下的错误信息,第一次移植内核希望大虾们指点迷津。
    Starting kernel ...

    Uncompressing Linux............................................. done, booting the kernel.
    Linux version 2.6.14-hsc0 (grant@grant-desktop) (gcc version 3.4.0) #25 Thu Jul 5 21:43:40 CST 2007
    CPU: Samsung-S3C44B0x [44b07700]
    Machine: S3C44B0X Development Board
    Memory management: Non-Paged(unused/noMMU)
    Built 1 zonelists
    Kernel command line:
    PID hash table entries: 128 (order: 7, 2048 bytes)
    Bad mode in interrupt handler detected: mode IRQ_32
    Internal error: Oops - bad mode: 0 [#1]
    CPU: 0
    pc : [<0c000058>] lr : [<00000001>] Not tainted
    sp : 0c145fa0 ip : 00000000 fp : 0c145ffc
    r10: 00000000 r9 : 0c1527bc r8 : 0c1614b4
    r7 : 000000b2 r6 : 0c1527c0 r5 : 0000000e r4 : 01c00000
    r3 : 60000053 r2 : 00000000 r1 : 0000023b r0 : 0000001f
    Flags: nZCv IRQs off FIQs off Mode IRQ_32 Segment user
    Process swapper (pid: 0, stack limit = 0x0c144194)
    Stack: (0x0c145fa0 to 0x0c146000)
    5fa0: 0000001f 0000023b 00000000 60000053 01c00000 0000000e 0c1527c0 000000b2
    5fc0: 0c1614b4 0c1527bc 00000000 0c145ffc 00000000 0c145fa0 00000001 0c000058
    5fe0: 600000d2 ffffffff 0c0082ac 0c152828 00000000 0c146000 0c300a08 0c0085f8
    Backtrace:
    Function entered at [<0c0085e8>] from [<0c300a08>]
    Code: e3a06007 ea00000c e59fd0d4 e92d0003 (e59f00d0)
    <2>Bad mode in interrupt handler detected: mode IRQ_32
    Internal error: Oops - bad mode: 0 [#2]
    CPU: 0
    pc : [<0c000058>] lr : [<00000001>] Not tainted
    sp : 0c145f34 ip : 00000000 fp : 0c145f88
    r10: 00000000 r9 : 0c1527bc r8 : 0c1614b4
    r7 : 0c1377bc r6 : 00000000 r5 : 0c145fa0 r4 : 0c14746c
    r3 : 60000053 r2 : 00000000 r1 : 000005cb r0 : 0000000b
    Flags: nZCv IRQs off FIQs off Mode IRQ_32 Segment user
    Process swapper (pid: 0, stack limit = 0x0c144194)
    Stack: (0x0c145f34 to 0x0c146000)
    5f20: 0000000b 000005cb 00000000
    5f40: 60000053 0c14746c 0c145fa0 00000000 0c1377bc 0c1614b4 0c1527bc 00000000
    5f60: 0c145f88 00000000 0c145f34 00000001 0c000058 600000d2 ffffffff 0c145f9c
    5f80: 0c145f8c 0c01fc94 0c01f948 0000001f 00000000 0c145fa0 00000001 0c01fc58
    5fa0: 0000001f 0000023b 00000000 60000053 01c00000 0000000e 0c1527c0 000000b2
    By grant(游客) | 个人主页 | 引用 | 返回 | 删除 | 回复
    2007-5-31 15:58:00
    Re:linux2.6.11.8在S3C44B0上的运行
    mybao(游客)现在console不知道能不能接收,文件系统还没做好。我的命令行是:CONFIG_CMDLINE="root=/dev/ram0 initrd=0xc400000,2M console=ttyS0,115200 init=/linuxrc" 。
    我现在试着做ramdisk,那么创建文件系统时,dev/ram0这个文件一定要创建吗,反正我创建了。
    .config相关设置:
    CONFIG_BLK_DEV_NBD=m
    CONFIG_BLK_DEV_RAM=y
    CONFIG_BLK_DEV_RAM_COUNT=1
    CONFIG_BLK_DEV_RAM_SIZE=2048
    CONFIG_BLK_DEV_INITRD=y
    CONFIG_INITRAMFS_SOURCE=""
    现在linux启动到:
    RAMDISK: Compressed image found at block 0

    然后就死掉了,不知道怎么回事?
    By mybao(游客) | 个人主页 | 引用 | 返回 | 删除 | 回复
    2007-5-21 14:16:00
    Re:linux2.6.11.8在S3C44B0上的运行
    mybao(游客)我现在一直在搞linux2.6.11.8,

    有一点点进展,struct tty_struct是在打开串口的时候open函数动态分配的。

    那么把串口作为控制台的话,也要打开串口吗?如果是的话,在哪里调用struct file_operations的open函数呢?
    By mybao(游客) | 个人主页 | 引用 | 返回 | 删除 | 回复
    2007-5-19 23:12:00
    Re:linux2.6.11.8在S3C44B0上的运行
    mybao(游客)struct file_operations 初始化我看见了,谢谢。

    我想仿照2410的串口驱动写S3C44B0的串口驱动,

    s3c24xx_serial_startup(struct uart_port *port)要给串口添加中断函数。

    s3c24xx_serial_startup跟串口绑定的struct tty_struct结构也有关吧,串口中断函数s3c24xx_serial_rx_chars要往struct tty_struct里面的buffer写数据。

    s3c24xx_serial_startup在哪里被调用,能不能给点提示?


    以下为blog主人的回复:

    不清楚你具体的情况和版本,我猜测,你的s3c24xx_serial_startup应该是被定义成struct uart_ops 里面的startup成员,在应用程序,打开串口的时候(我估计应该是open,但是,没有跟踪过,不敢确认),调用startup的。

    By mybao(游客) | 个人主页 | 引用 | 返回 | 删除 | 回复
    2007-5-17 14:24:00
    Re:linux2.6.11.8在S3C44B0上的运行
    mybao(游客)你书上例子用的是
    register_chrdev 注册的

    我想用register_chrdev_region注册字符设备,

    不知道struct file_operations 这个是怎么初始化的

    以下为blog主人的回复:

    google一下,有不少例子的,使用

    void cdev_init(struct cdev *cdev, struct file_operations *fops);

    添加。具体看看内河中的代码,会有所启示,比如:

    drivers/char/tty_io.c中有:

     cdev_init(&tty_cdev, &tty_fops);
     if (cdev_add(&tty_cdev, MKDEV(TTYAUX_MAJOR, 0), 1) ||
         register_chrdev_region(MKDEV(TTYAUX_MAJOR, 0), 1, "/dev/tty") < 0)
    ....

    大概就这个意思吧。我现在还是用2.6.9内核,我发现,register_chrdev_region用得并不是很多。再新得内核,我也没有仔细研究过。

    By mybao(游客) | 个人主页 | 引用 | 返回 | 删除 | 回复
    2007-5-17 14:20:00
    Re:linux2.6.11.8在S3C44B0上的运行
    mybao(游客)正在学习驱动开发,想在linux2.6.11.8上移植S3C44B0的串口驱动。但是linux2.6注册字符设备最好用:
    register_chrdev_region 这个函数吧,
    它创建结构
    struct char_device_struct
    里面包含了结构
    struct file_operations

    struct file_operations 在哪里被初始化呢 ?


    现在越看越晕了,一点头绪都没有,

    By mybao(游客) | 个人主页 | 引用 | 返回 | 删除 | 回复
    2007-5-13 20:14:00
    Re:linux2.6.11.8在S3C44B0上的运行
    mybao(游客)在有些头文件里有
    #ifdef MODULE ......else......#endif语句

    这个MODULE是在哪里定义的呢,也不是通过make menuconfig 生成的.config定义的阿?

    以下为blog主人的回复:

    make modules的时候定义的MODULE宏

    By mybao(游客) | 个人主页 | 引用 | 返回 | 删除 | 回复
    2007-5-2 13:38:00
    Re:linux2.6.11.8在S3C44B0上的运行
    mybao(游客)谢谢刘淼
    By mybao(游客) | 个人主页 | 引用 | 返回 | 删除 | 回复
    2007-5-1 11:49:00
    关于中断我还是有疑问
    mybao(游客)我在S3C44B0上移植linux2.6.11.8。

    __trap_init函数把__stubs_start开始的中断程序拷贝到0xc000208的地址处。但是0xc000008开始的跳转指令必须跳转到0xc000208开始的中断程序:
    swi SYS_ERROR0
    b __real_stubs_start + (vector_und - __stubs_start)
    ldr pc, __real_stubs_start + (.LCvswi - __stubs_start)
    b __real_stubs_start + (vector_pabt - __stubs_start)
    b __real_stubs_start + (vector_dabt - __stubs_start)
    b __real_stubs_start + (vector_addrexcptn - __stubs_start)
    b __real_stubs_start + (vector_irq - __stubs_start)
    b __real_stubs_start + (vector_fiq - __stubs_start)

    可是__real_stubs_start 等于 .LCvectors + 0x200,
    这为啥能跳转到0xc000208,__real_stubs_start并不等于0xc000208啊,这是咋回事

    以下为blog主人的回复:

    __trap_init函数copy的时候,0x200处的东西,就是__stubs_start的位置的代码也copy到了0xc0002xx这个地方。ARM中的b指令是一个相对跳转指令。比如:

    b __real_stubs_start

    编译的时候,根据当前代码定位的地址(.LCvectors起始的偏移),和跳转的地址__real_stubs_start(也就是.LCvectors+200)计算跳转的相对位置。得到的结果就是,要跳转到这条指令之后,0x200的地方。这就是我们copy的__stubs_start的东西。

     

    By mybao(游客) | 个人主页 | 引用 | 返回 | 删除 | 回复
    2007-4-26 23:03:00
    Re:linux2.6.11.8在S3C44B0上的运行
    mybao(游客)三水的书写的蛮有内容的,偶也买了。可是关于中断的我还是有疑问,我在S3C44B0上移植linux2.6.11.8,



    我感觉__real_stubs_start的实际值应该等于0xc000000+0x200才对啊?等于LCvectors + 0x200 是什么意思?

    linux的其实地址是0xc008000,LCvectors 肯定大于0xc000200,

    我想让__real_stubs_start等于0xc000200,实际实现就是让LCvectors 减去一个常数就得到了,这个常数可以通过map文件得到,完全可以实现。

    现在是我的U-BOOT出了点问题,在调试,还不知道我的想法是不是正确的

    以下为blog主人的回复:

    不是很清楚你的疑问。我觉得你说得和实际代码不冲突啊?

    这里就是说异常向量放在什么地方。因为没有MMU支持,所以这个地址就要和bootloader配合了。

    By mybao(游客) | 个人主页 | 引用 | 返回 | 删除 | 回复
    2007-4-24 22:40:00
    Re:linux2.6.11.8在S3C44B0上的运行
    mybao(游客)三水你好,关于linux2.6.11.8的中断
    __stubs_end:

    .equ __real_stubs_start, .LCvectors + 0x200

    .LCvectors:
    swi SYS_ERROR0
    b __real_stubs_start + (vector_und - __stubs_start)
    ldr pc, __real_stubs_start + (.LCvswi - __stubs_start)
    b __real_stubs_start + (vector_pabt - __stubs_start)
    b __real_stubs_start + (vector_dabt - __stubs_start)
    b __real_stubs_start + (vector_addrexcptn - __stubs_start)
    b __real_stubs_start + (vector_irq - __stubs_start)
    b __real_stubs_start + (vector_fiq - __stubs_start)


    __real_stubs_start为啥要等于LCvectors + 0x200
    感觉这个没有理由啊,__real_stubs_start应该等于0xc000000+0x200才对啊?
    By mybao(游客) | 个人主页 | 引用 | 返回 | 删除 | 回复
    2007-4-17 18:30:00
    Re:linux2.6.11.8在S3C44B0上的运行
    mybao(游客)只想内存中打印

    这句是什么意思?

    以下为blog主人的回复:

    不好意思,刚才着急开会,最后这句写错了,应该是

    “只向内存”

    By mybao(游客) | 个人主页 | 引用 | 返回 | 删除 | 回复
    2007-4-16 18:15:00
    Re:linux2.6.11.8在S3C44B0上的运行
    mybao(游客)本想研究下printk这个函数,太难看了。bootload已经初始化串口了,如果linux本身不重新初始化串口的话,调用printk不能输出吗?

    以下为blog主人的回复:

    恩,看代码是这个样子。主要问题不是初始化串口的事情。因为在Linux启动阶段,需要创建页表,映射虚拟地址空间,然后才能访问到相应的寄存器。这个过程,对外设地址空间的访问就比较困难。所以,printk在console初始化之前,只向内存中打印。

    By mybao(游客) | 个人主页 | 引用 | 返回 | 删除 | 回复
    2007-4-16 18:10:00
    Re:linux2.6.11.8在S3C44B0上的运行
    mybao(游客)提示:内核启动的时候,在console没有正确初始化之前,控制台(串口)不能输出,为了调试方便,可以在kernel/printk.c中的vprintk前面加入...

    请教三水,console没有正确初始化之前,start_kernel就这样调用printk(linux_banner);

    既然这时printk()不能正确显示,那start_kernel干吗在console没有初始化之前调用printk(linux_banner),岂不是没有意义了?
    By mybao(游客) | 个人主页 | 引用 | 返回 | 删除 | 回复
    2007-4-3 16:36:00
    Re:linux2.6.11.8在S3C44B0上的运行
    mybao(游客)请教三水,
    linux-2.6.11.8/arch/arm/boot/compressed/vmlinux.lds.in
    OUTPUT_ARCH(arm)
    ENTRY(_start)
    SECTIONS
    {
    . = TEXT_START;
    _text = .;

    .text : {
    _start = .;
    *(.start)
    *(.text)
    *(.fixup)
    *(.gnu.warning)
    *(.rodata)
    *(.rodata.*)
    *(.glue_7)
    *(.glue_7t)
    *(.piggydata)
    . = ALIGN(4);
    }
    _etext = .;
    _got_start = .;
    .got : { *(.got) }
    _got_end = .;
    .got.plt : { *(.got.plt) }
    .data : { *(.data) }
    _edata = .;

    . = BSS_START;
    __bss_start = .;
    .bss : { *(.bss) }
    _end = .;
    .stack (NOLOAD) : { *(.stack) }
    .stab 0 : { *(.stab) }
    .stabstr 0 : { *(.stabstr) }
    .stab.excl 0 : { *(.stab.excl) }
    .stab.exclstr 0 : { *(.stab.exclstr) }
    .stab.index 0 : { *(.stab.index) }
    .stab.indexstr 0 : { *(.stab.indexstr) }
    .comment 0 : { *(.comment) }
    }


    .got 段从哪来的,搜遍了linux-2.6.11.8根目录也没找到在哪定义的,启动代码用到了,到底有什么意义呢?

    .stab 段也不知道从哪来的,有什么用?

    以下为blog主人的回复:

    这些问题就是标准的Linux内核的问题,google去吧。很多答案的。其实我了解的也不是很细,但是需要的时候,很容易找到答案吧。

    By mybao(游客) | 个人主页 | 引用 | 返回 | 删除 | 回复
    2007-3-30 17:20:00
    Re:linux2.6.11.8在S3C44B0上的运行
    mybao(游客)好像是这一句
    $(obj)/vmlinux: $(obj)/vmlinux.lds $(obj)/$(HEAD) $(obj)/piggy.o \
    $(addprefix $(obj)/, $(OBJS)) FORCE
    $(call if_changed,ld)
    @:

    $(HEAD)把head-s3c44b0.S 连接进来,是这样吗?如果生成不压缩的内核,代码从哪里执行呢?
    这里好久没人说话了,我来顶一顶!

    以下为blog主人的回复:

    主要是看这里

    $(obj)/vmlinux.lds

    对于ARM来说就是arch/arm/kernel/vmlinux.lds文件,这是一个连接脚本,什么段放在什么位置都是这个决定的。它在make的时候是由arch/arm/kernel/vmlinux.lds.S生成的,所以,如果要修改,就改.S的。

    By mybao(游客) | 个人主页 | 引用 | 返回 | 删除 | 回复
    2007-3-30 16:59:00
    Re:linux2.6.11.8在S3C44B0上的运行
    mybao(游客)三水,你好,我也想在S3C44B0上运行linux2.6.11.8,可是对makefile了解不多,想请教一下linux首先是从head-s3c44b0.S开始执行的吗?从makefile的哪里能看出来呢?

    我现有就是搞不清文件被连接的层次关系,多多指教!
    By mybao(游客) | 个人主页 | 引用 | 返回 | 删除 | 回复
    2006-9-19 9:49:00
    Re:linux2.6下的S3C44B0X的LCD驱动如何书写呢?
    柳暗花明(游客)#ifdef MODULE
    module_init(s3c44b0xfb_init);
    module_exit(s3c44b0xfb_exit);
    #endif
    我是按照博创原有的程序写的,不好意思现在对模块加载还不太熟悉,还请三水指点迷津。
    驱动程序在启动的时候被应该被加载了吧?内核启动时显示的信息来看能够检测到FrameBuffer设备阿??
    显示的信息如下:
    Console:colour dumy device 80x30

    Initializing Crytographic API
    Console:switching to colour frame buffer device 80x25
    fb0:Vritual frame buffer device,using 1024K of video memory
    现在我一直找不到屏幕没有反映的原因?请三水帮助分析一下,谢谢!

    以下为blog主人的回复:

     我看你的代码中有

     printk("LCD buffer : %p\n", fbuf);
    这一行打印出来了吗?

    fb0:Vritual frame buffer device,using 1024K of video memory

    你似乎使用了

    Vritual frame buffer,这是一个在内存中的虚拟framebuffer。不是对应了你的硬件。

    By 柳暗花明(游客) | 个人主页 | 引用 | 返回 | 删除 | 回复
    2006-9-18 17:08:00
    linux2.6下的S3C44B0X的LCD驱动如何书写呢?
    柳暗花明(游客)三水,你好!
    我参照博创S3C44B0开发板的原有LCD驱动编写了2.6下的LCD驱动,由于2.6的FrameBuffer结构改动较大,现在遇到了很多的问题,为什么 配置内核时[]Select compiled-in fonts字体选择都是VGA的呢?在初始化上我设定为320*240彩屏8位单扫。但是现在内核启动后屏幕没有任何的反映。我修改了linux-2.6.x/arh/armnommu/kernel/setup.c中的default command line ,将控制台设置为:console=tty console=ttyS0希望LCD同步显示串口输出的内容,或者在LCD显示系统启动信息。后来在uboot的启动参数中也设置了console,但是屏幕依然没有任何的反映。我已经将我写的程序发到了你的邮箱,还请您指点迷津。

    以下为blog主人的回复:

     你确认驱动程序在启动的时候被加载了?你代码最后

    #ifdef MODULE
    module_init(s3c44b0xfb_init);
    module_exit(s3c44b0xfb_exit);
    #endif

    有问题吧?那个#ifdef错了。这样,只有模块加载的时候,s3c44b0xfb_init函数才会被调用的。

     

    By 柳暗花明(游客) | 个人主页 | 引用 | 返回 | 删除 | 回复
    2006-7-24 10:24:00
    初始化耽误时间问题
    初涉者(游客)我现在也没花时间去查初始化耽误的时间在哪里,我只是从上电到进入我的一个应用程序用一个printf("")显示一个信息要花费时间在10秒钟左右。我现在也不知道从哪里去查这个初始化耽误的时间

    以下为blog主人的回复:

     看bootloader内核等的输出信息,看看哪里时间耽误比较长。从上电到起应用程序,10秒钟不算特别长。你用的是S3C44B0吧?这东西本来也不是很快。

    我估计,时间主要用在:

    1、bootloader把内核从Flash copy到SDRAM——你不是用ramfs做root吧?不需要copy根文件系统吧?

    2、内核解压缩——和内核大小有关系

    3、如果用jffs2做root,就是mount jffs2做根文件系统比较花时间,如果Flash很大,这里会比较慢。

    大概主要也就是这么多了。当然,不排除一些比较容易忽视的“弱”问题,比如:你bootloader或者启动脚本中,故意有几秒钟的延时。

    By 初涉者(游客) | 个人主页 | 引用 | 返回 | 删除 | 回复
    2006-7-21 14:24:00
    初始化时间过长
    初涉者(游客)三水先生,我想请教一个问题,现在我的系统是uclinux,每次初始化的时间都很长大约10秒左右过后才能工作正常,你帮我分析一下初始化这么长时间主要的问题是在哪里?

    以下为blog主人的回复:

    您说的初始化时间,是指哪里初始化时间?

    By 初涉者(游客) | 个人主页 | 引用 | 返回 | 删除 | 回复
    2006-7-20 15:24:00
    uclinux环境下汉字显示方面的问题!
    阿成(游客)三水你好,我想请教个问题,在uclinux环境下LCD中,汉字如何处理?好像uclinux没有讲过汉字显示方面的东西。

    以下为blog主人的回复:

     如果LCD是基于Linux framebuffer的,那就有字模就可以显示。相当于图形界面,把汉字画上去。如果是要在文本模式下显示汉字,估计需要修改内核代码了。

    By 阿成(游客) | 个人主页 | 引用 | 返回 | 删除 | 回复
    2006-7-17 15:04:00
    Re:linux2.6.11.8在S3C44B0上的运行
    yixin8611(游客)
    以下引用yixin8611(游客)在2006-7-13 20:46:00发表的评论:

    忘了说一点,三水先生别闲我占版面地方呀,呵呵
    内核中配置nfs是根据你那本书中348页配置的.






    以下为blog主人的回复:


     我还是第一次看见这个错误。你可以ping大数据包看看是不是可以?


    多谢,问题已经解决原来在配置应用程序时,虽然配置了mount项但mount:support NFS mounts没有选上
    By yixin8611(游客) | 个人主页 | 引用 | 返回 | 删除 | 回复
    2006-7-14 16:26:00
    Re:linux2.6.11.8在S3C44B0上的运行
    柳暗花明(游客)最近也在移植2.6,我从开发板mount上位机出现下列错误:
    nfs_read_super:missing data argument
    mount failed:Invalid argument
    我用的命令是mount -t nfs 192.168.0.121:/ mnt/test / mnt
    请问我的命令是否有错?还是其他地方有问题?上位机的NFS服务开通了,上位机能mount自己,而且我也给相应的目录设置了读写权限。我担心网络驱动还有bug,但我能ping通开发板,在开发板也能ping通上位机,并用Ethereal抓包测试ping没有问题。在内核配置时我选择了相关的NFS选项,弄了很久也找不到问题的原因,请三水指点迷津。

    以下为blog主人的回复:

     噢,还有防火墙是不是关掉了?

    By 柳暗花明(游客) | 个人主页 | 引用 | 返回 | 删除 | 回复
    2006-7-13 20:46:00
    Re:linux2.6.11.8在S3C44B0上的运行
    yixin8611(游客)忘了说一点,三水先生别闲我占版面地方呀,呵呵
    内核中配置nfs是根据你那本书中348页配置的.

    以下为blog主人的回复:

     我还是第一次看见这个错误。你可以ping大数据包看看是不是可以?

    By yixin8611(游客) | 个人主页 | 引用 | 返回 | 删除 | 回复
    2006-7-13 20:36:00
    Re:linux2.6.11.8在S3C44B0上的运行
    yixin8611(游客)首先多谢指点,上次2.6.9 移植运行到/sbin/init确实于console相关,添加了串口驱动后,正确运行了.现在我已经给upnet3000平台添加上网卡驱动,经过ping 后双方均可ping通,但是今天挂载nfs有点问题,请指点,redhat9上的nfs 服务已经没有问题了,我也用平台自带的2.4内核试过,根文件系统的添加正如上次所说的直接链接到内核中的,现在执行mount -t nfs 192.168.0.121:/uclinux /home命令出现如下错误提示,不知何故?192.168.0.121为主机IP
    Sash command shell (version 1.1.1)
    /> ifconfig eth0 192.168.0.70
    /> mount -t nfs 192.168.0.121:/uclinux /home
    nfs warning: mount version newer than kernel
    nfs_get_sb: invalid root filehandle
    mount: Mounting 192.168.0.121:/uclinux on /home failed: Invalid argument
    pid 21: failed 256
    /> mount -t nfs 192.168.0.121:/uclinux /home
    nfs warning: mount version newer than kernel
    nfs_get_sb: invalid root filehandle
    mount: Mounting 192.168.0.121:/uclinux on /home failed: Invalid argument
    pid 22: failed 256
    /> mount -t nfs 192.168.0.121:/uclinux /etc
    nfs warning: mount version newer than kernel
    nfs_get_sb: invalid root filehandle
    mount: Mounting 192.168.0.121:/uclinux on /etc failed: Invalid argument
    pid 23: failed 256
    /> ping -c 1 192.168.0.121
    PING 192.168.0.121 (192.168.0.121): 56 data bytes
    64 bytes from 192.168.0.121: icmp_seq=0 ttl=64 time=0.0 ms

    --- 192.168.0.121 ping statistics ---
    1 packets transmitted, 1 packets received, 0% packet loss
    round-trip min/avg/max = 0.0/0.0/0.0 ms
    />
    By yixin8611(游客) | 个人主页 | 引用 | 返回 | 删除 | 回复
    查看所有评论
    发表评论:
    载入中。。。

    日历

    <<  < 2007 - >  >>
          1 2 3 4
    5 6 7 8 9 10 11
    12 13 14 15 16 17 18
    19 20 21 22 23 24 25
    26 27 28 29 30 31

    公告

    最新文章

    载入中。。。

    文章分类

    载入中。。。

    MY Favorite Blogs

    最近评论

    载入中。。。

    最近留言

    载入中。。。

    信息

    载入中。。。

    登陆

    载入中。。。