yoco's profile水水的蓝PhotosBlogLists Tools Help

Blog


    February 17

    MSN...LIVE用起来 越来越麻烦

    MSN...LIVE用起来 越来越麻烦讽刺
    November 09

    花生米

    米的妈妈是花,
    因为花生米;
    米的爸爸是蝶,
    因为蝶恋花;
    米的外婆是妙笔,
    因为妙笔生花;
    米的外公是爆米花,
    因为又抱过米又抱过花.大笑
    November 03

    amazing grace

    天籁就是这样被解释的微笑
     
    第一次听这首歌是在柯南里,一听就被感动了
    就像小兰和新一在河边听到那首歌
    那歌能浸到人的心坎里天使
     
    最喜欢这首歌的Hayley Westenra 版本
     
    amazing grace, how sweet the sound
    that saved a wretch like me.
    i once was lost but now i'm found,
    was blind but now i see.
    t'was grace that taught my heart to fear
    and grace my fear relieved
    how precious did that grace appear,
    the hour i first believed.
    through many dangers, toils and snares
    we have already come
    t'was grace that brought us safe thus far
    and grace will lead us home.
    when we've been there ten thousand years
    bright shining as the sun;
    we've no less days to sing god's praise
    than when we first begun.
     

    奇异恩典,乐声何等甜美
    拯救了像我这般无助的人
    我曾迷失,如今已被找回
    曾经盲目,如今又能看见

    神迹教我心存敬畏
    减轻我心中的恐惧
    神迹的出现何等珍贵
    那是我第一次相信神的时刻

    历经无数险阻、陷阱
    我已走了过来
    神迹保我安全无虞至今
    神迹将指引我回到家

    主耶稣的名字
    在信徒的耳里听来多么甜美
    那抚平了他的烦忧,治愈了他的伤
    赶走了他的恐惧

    耶稣必得独自背负十字架
    以拯救全世界
    但每个人的心里,包括我在内
    都有着一副十字架

    我们在此已一万年
    光芒如太阳一样耀眼
    和最初相比
    我们能赞美上帝的时日已不多
     
     
    《奇异恩典歌》是其中一首最著名的基督教圣诗。歌词为约翰·牛顿所填,出现在威廉·科伯(William Cowper)及其他作曲家创作的赞美诗集Olney Hymns的一部分。

    约翰·牛顿(John Newton)(1725年1807年)曾经是一艘奴隶船的船长。在1748年5月10日归家途中遇到了暴风雨,他经历了“伟大的判决”。在他的航海日志中他写道:他的船处在即将沉没的重大危险中,他喊道“主怜悯我们”。他逐渐走向光明,但在他与主的对话之后,仍然贩卖奴隶。

    在非洲一个港口等待奴隶装船的时候,牛顿写下了歌曲《耶稣之名如此美妙》。以后,他和奴隶贩运割断了关系,当上了一名牧师,并且加入了威廉·威伯福斯领导的反奴隶运动

    October 06

    绿豆糕

    新空间的颜色很像绿豆糕,
    咬一口
    很甜很香
    恩恩~~~
    June 07

    我的爷爷和姥爷,你们好吗?

    爷爷和姥爷,你们好吗?
    什么时候可以和爷爷一起喝茶,什么时候可以再看姥爷亮出那雪亮的指挥刀。
    好想和爷爷一起喝茶聊天,我好不容易上大学了,能和爷爷说上话了,爷爷你怎么走了呢。
    你们教我做人做事,教我要坚强勇敢。
    想念你们...左侧拥抱右侧拥抱
     

    我很幸运

    我太幸运了,每到一个地方都会遇到对我非常好的人。
    真的很感谢你们~~大笑
    May 28

    水水的颜色

    水水的颜色,看起来很舒服
    April 11

    活着真好

    现在每天都对着计算机 只觉得自己傻掉了
    QQ每天都上的 却一直隐身 很少讲话。。。似乎不知道怎么讲,讲什么 担心变的嘴笨的自己和老朋友生疏了。。
    呵呵
    今天上线看到了小姜。。看了几篇日志。。有种慢慢活回来的感觉。。
    呵呵 以后还能常来看日志吗 不知道哎。。。
     
    今天很开心,希望以后还能常来。。
    活过来的感觉真好
     
    January 24

    老牛拉破车

    新装了Z版的操作系统
    除了可以安装MSN的照片上载控件比较爽之外...
    其他的感觉就是:老牛拉破车
     
    完整版的系统对于我的这个"老牛"来说实在太沉重了...
     
    October 20

    米事回来看看

    米事回来看看,最近较少忙于blog了
    或者是出于太懒了
    从来都很PF每天更新日志得人...
    我实在是很懒
    懒到几个月都没有更新一次了
     
    个人感觉
    msn升级到live以后没有原来得界面好了
    也许是我还没有仔细的研究过space的新特性
    呵呵
    August 29

    新窝

    我的老机器承受不起live拉
    以后把空间搬到http://smilecn.bokee.com/
    欢迎大家来参观~~
    还是很怀念msn,毕竟经营这里1年多了
    July 26

    SBC-2410系统烧写记录

    今天又去烧写开发版的系统
    已经做到
    Congratulations!
    Reboot and Enjoy Matrix V !
    可是重启之后液晶屏还是没有显示
    我们从开始拿到一个空的版子
    到现在烧写成功,液晶屏就没有显示过什么
    奇怪啊,如果是已经烧好了文件系统
    开始应该又显示啊
    在minicom里面的显示都正常
    但开发版的液晶屏没有显示
    明天去问问老师

    不能上传图片

    不能上传图片了
    点击了下载控件之后 却下不到东东
    有的人说是浏览器设置问题
    具体是哪里问题呢
    也没有人告诉我
     
    为什么我上个系统可以下这个控件的
     
    不满
    也不给足够的提示信息
     
    July 25

    如何在SBC-2410X上安装嵌入式Linux

    本文转载自 技创科技 并对操作中不同于本文的部分用红色做了注释 http://www.techor.com/html/news/view.asp?id=1125&GrandID=&ParentID=&GroupID=
     

    本文介绍如何在SBC-2410X上安装带有可读写文件系统的嵌入式Linux

    1. 可能用到的文件和主机环境配置
    2. 使用Jtag安装vivi(bootloader)
    3. 使用串口下载安装内核
    4. 通过NFS(网络文件系统)安装整个系统

    1. 可能用到的文件和主机环境配置

    (1) 主机环境推荐配置:

    主板: 推荐使用Intel芯片组的主板(其他如威盛的主板可能不行)

    操作系统: 推荐在您的计算机上同时安装WindowsXP/2000和Redhat9.0, 不建议使用任何形式的虚拟机如Vmware等

    (2) 可能用到的文件列表

    vivi-yaffs-v5 - bootloader

    zImage-yaffs-v5 - 通过串口下载的内核

    root-for-nfs-v5.8.tgz - nfs共享目录

    fa_exports - 共享目录路径设置文件

    Jflash - linux下Jtag烧写工具

    以上文件的安装位置:

    请把viv-yaffs-v5i和zImage-yaffs-v5复制到root目录下以方便使用minicom下载.

    把root-for-nfs-v5.8.tgz按照以下命令解压:

    tar xvzf root-for-nfs-v5.8.tgz -C /friendly-arm

    2. 使用Jtag安装vivi(bootloader)

    (1) 如图所示使用Jtag下载电缆连接SBC-2410X,并打开电源开关

    (2) 如图所示使用Jflash烧写vivi到Nand Flash

    3. 使用串口下载安装内核

    当 vivi 烧入Flash,并能正常启动,就可以使用它来下载内核了,(见vivi的详细使用方法),下面我们介绍如何使用 vivi 下载内核。

    (1)连接好串口,在Linux控制台上输入minicom, 打开串口终端, 因为SBC-2410X附带的 vivi 启动等待时间很短,因此请一直按下您PC上的空格键,然后打开电源开关,就会进入 vivi 的命令提示符下,如图所示.

    按住空格键,打开电源,进入bootloader模式

    (2) 执行“ load flash kernel x ”命令,开始下载内核(我们做的时候此时应先修改一个参数param set  xmodem 1这样就可以了),图 7-16 所示,该命令的解释如下:

    load – vivi 的下载命令

    flash – 把文件下载到 flash 中

    kernel – 要下载的文件是 kernel 类型, 和分区参数同名

    x – 使用超级终端的 xmdoem 协议下载。

    此时先按下“Ctrl”不要松开, 再按下“a”键, 然后同时松开, 再按下“s”键, 进入下载模式,如图所示选择 xmodem 协议方式下载。发送文件结束, vivi 将自动保存所下载的文件到flash中.

    注意事项:当使用xmodem进行下载时,一般第一次会出现超时不能下载的现象,再次输入load flash kernel x,之后请快速按Ctrl+A,松开,再快速按s键,然后一直快速按回车即可。

    下面是使用minicom下载kernel时的顺序图例.

    输入"load flash kernel x"开始下载内核

    选择"xmodem"协议开始下载

    输入要发送的文件和并选择 Xmodem 协议发送

    kernel下载过程

    vivi 自动把内核保存到 flash 中

    4. 通过NFS(网络文件系统)安装整个系统

    按照以上步骤执行完毕, 在vivi模式下输入"boot", 将会启动刚刚下载的内核,但是无法进入系统,是因为还没有文件系统,下面介绍如何使用NFS安装文件系统.

    (1)在PC Linux上启动NFS服务

    step1: 首先解压root-for-nfs-v5.8.tgz创建nfs共享目录: tar xvzf root-for-nfs-v5.8.tgz -C /friendly-arm

    如果你的系统上已经存在/friendly-arm/root目录, 请先删除它:rm -rf /friendly-arm/root

    step2: 把共享目录路径加入到/etc/exports中: cat fa_exports >> /etc/exports (点击查看fa_exports内容)

    如果您已经设置好了/etc/exports, 则不需要执行该步.

    step3: 启动nfs服务:

    确认你的PC Linux系统IP地址已经配置好, 为了适合我们提供的nfs启动参数, 请使用以下命令设置您的IP地址:

    ifconfig eth0 192.168.0.1

    然后使用以下命令启动nfs服务:

    /etc/init.d/nfs restart

    (2)使用bk和bs命令烧写文件系统

    step1: 首先使用NFS启动系统

    在vivi提示符模式输入以下命令参数, 使用nfs启动系统:

    param set linux_cmd_line "console=ttyS0 root=/dev/nfs nfsroot=192.168.0.1:/friendly-arm/root ip=192.168.0.69:192.168.0.1:192.168.0.1:255.255.255.0:matrix4.arm9.net:eth0:off"

    然后使用"boot"命令启动系统, 启动信息如下:

    VIVI version 0.1.4 (root@capbily) (gcc version 2.95.3 20010315 (release)) #0.1.4 Mon Oct 4 16:20:35 CST 2004
    MMU table base address = 0x33DFC000
    Succeed memory mapping.
    NAND device: Manufacture ID: 0xec, Chip ID: 0x76 (Samsung K9D1208V 0M )
    Found saved vivi parameters.
    Press Return to start the LINUX now, any other key for vivi
    type "help" for help.
    friendly-arm>param set linux_cmd_line "console=ttyS0 root=/dev/nfs nfsroot=192.168.0.1:/friendly-arm/root ip=192.168.0.69:192.168.0.1:192.168.0.1:255.255.255.0:matrix4.arm9.net:eth0:off"
    Change linux command line to "console=ttyS0 root=/dev/nfs nfsroot=192.168.0.1:/friendly-arm/root ip=192.168.0.69:192.168.0.1:192.168.0.1:255.255.255.0:matrix4.arm9.net:eth0:off"
    friendly-arm> boot
    Copy linux kernel from 0x00030000 to 0x30008000, size = 0x00100000 ... done
    zImage magic = 0x 016f 2818
    Setup linux parameters at 0x30000100
    linux command line is: "console=ttyS0 root=/dev/nfs nfsroot=192.168.0.1:/friendly-arm/root ip=192.168.0.69:192.168.0.1:192.168.0.1:255.255.255.0:matrix4.arm9.net:eth0:off"
    MACH_TYPE = 193
    NOW, Booting Linux......
    Uncompressing Linux....................................................... done, booting the kernel.
    Linux version 2.4.18 -rmk7-pxa1 (root@capbily) (gcc version 2.95.3 20010315 (release)) #9 Wed Oct 6 17:00:54 CST 2004
    CPU: ARM/CIRRUS Arm920Tsid(wb) revision 0
    Machine: Samsung-SMDK2410
    On node 0 totalpages: 16384
    zone(0): 16384 pages.
    zone(1): 0 pages.
    zone(2): 0 pages.
    Kernel command line: console=ttyS0 root=/dev/nfs nfsroot=192.168.0.1:/friendly-arm/root ip=192.168.0.69:192.168.0.1:192.168.0.1:255.255.255.0:matrix4.arm9.net:eth0:off
    DEBUG: timer count 15626
    Calibrating delay loop... 99.94 BogoMIPS
    Memory: 64MB = 64MB total
    Memory: 62676KB available (1374K code, 364K data, 56K init)
    Dentry-cache hash table entries: 8192 (order: 4, 65536 bytes)
    Inode-cache hash table entries: 4096 (order: 3, 32768 bytes)
    Mount-cache hash table entries: 1024 (order: 1, 8192 bytes)
    Buffer-cache hash table entries: 4096 (order: 2, 16384 bytes)
    Page-cache hash table entries: 16384 (order: 4, 65536 bytes)
    POSIX conformance testing by UNIFIX
    Linux NET4.0 for Linux 2.4
    Based upon Swansea University Computer Society NET3.039
    Initializing RT netlink socket
    CPU clock = 200.000 Mhz, HCLK = 100.000 Mhz, PCLK = 50.000 Mhz
    Initializing S 3C 2410 buffer pool for DMA workaround
    usbctl: zombie --> [reset] --> default. Device in default state.
    S 3C 2410 USB Controller Core Initialized
    USB Function Character Driver Interface - 0.5, (C) 2001, Extenex Corp.
    usbctl: Opened for usb-char
    usbctl: Started for usb-char
    Starting kswapd
    devfs: v1.10 (20020120) Richard Gooch (rgooch@atnf.csiro.au)
    devfs: boot_options: 0x1
    ttyS%d0 at I/O 0x50000000 (irq = 52) is a S 3C 2410
    ttyS%d1 at I/O 0x50004000 (irq = 55) is a S 3C 2410
    ttyS%d2 at I/O 0x50008000 (irq = 58) is a S 3C 2410
    pty: 256 Unix98 ptys configured
    leds initialized
    S 3C 2410 Real Time Clock Driver v0.1
    block: 128 slots per queue, batch=32
    Uniform Multi-Platform E-IDE driver Revision: 6.31
    ide: Assuming 50MHz system bus speed for PIO modes; override with idebus=xx
    eth0: cs8900 rev K(3.3 Volts) found at 0xd0000300
    cs89x0 media RJ-45, IRQ 37
    Linux video capture interface: v1.00
    SCSI subsystem driver Revision: 1.00
    scsi0 : SCSI host adapter emulation for IDE ATAPI devices
    UDA1341 audio driver initialized
    NAND device: Manufacture ID: 0xec, Chip ID: 0x76 (Samsung K9D1208V 0M )
    bon0: 00000000-00030000 (00030000) 00000000
    bon1: 00030000-00130000 (00100000) 00000000
    bon2: 00130000-03ff4000 (03ec4000) 00000000
    usb.c: registered new driver usbdevfs
    usb.c: registered new driver hub
    usb-ohci.c: USB OHCI at membase 0xe9000000, IRQ 26
    usb.c: new USB bus registered, assigned bus number 1
    hub.c: USB hub found
    port #1 suspened!
    port #0 alived!
    hub.c: 1 port detected
    usb.c: registered new driver usblp
    printer.c: v0.8:USB Printer Device Class driver
    usb.c: registered new driver ov511
    ov511.c: v 1.48a for Linux 2.4 : OV511 USB Camera Driver
    Initializing USB Mass Storage driver...
    usb.c: registered new driver usb-storage
    USB Mass Storage support registered.
    NET4: Linux TCP/IP 1.0 for NET4.0
    IP Protocols: ICMP, UDP, TCP
    IP: routing cache hash table of 512 buckets, 4Kbytes
    TCP: Hash tables configured (established 4096 bind 4096)
    IP-Config: Complete:
    device=eth0, addr=192.168.0.69, mask=255.255.255.0, gw=192.168.0.1,
    host=matrix4, domain=, nis-domain=arm9.net,
    bootserver=192.168.0.1, rootserver=192.168.0.1, rootpath=
    NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.
    NetWinder Floating Point Emulator V0.95 (c) 1998-1999 Rebel.com
    Looking up port of RPC 100003/2 on 192.168.0.1
    Looking up port of RPC 100005/1 on 192.168.0.1
    VFS: Mounted root (nfs filesystem).
    Mounted devfs on /dev
    Freeing init memory: 56K
    ========================================
    = Friendly-ARM Tech. Ltd. =
    = http://www.arm9.net =
    = http://www.arm9.com.cn =
    ========================================
    init started: BusyBox v0.60.5 (2003.09.05-09:25+0000) multi-c 齦 l binary
    Using /lib/input.o
    Using /lib/keybdev.o
    insmod: unresolved symbol handle_scancode
    insmod: unresolved symbol keyboard_tasklet
    insmod: unresolved symbol kbd_ledfunc
    Using /lib/mousedev.o
    mice: PS/2 mouse device common for all mice
    Using /lib/evdev.o
    Using /lib/video.o
    insmod: couldn't find the kernel version the module was compiled for
    Using /lib/videodev.o
    Linux video capture interface: v1.00
    video_dev: unable to get major 81
    insmod: init_module: videodev: Input/output error
    Using /lib/ov511.o
    usb.c: registered new driver ov511
    ov511.c: v 1.48a for Linux 2.4 : OV511 USB Camera Driver
    Using /lib/lcd640x480x32.o
    lcd address is c4960000(33800000)
    LCD640x480x32 installed, by capbily@hotmail.com(http://www.arm9.net
    Using /lib/hid-core.o
    insmod: unresolved symbol hidinput_connect
    insmod: unresolved symbol hidinput_hid_event
    insmod: unresolved symbol hidinput_disconnect
    Using /lib/usbmouse.o
    usb.c: registered new driver usb_mouse
    usbmouse.c: v1.6:USB HID Boot Protocol mouse driver
    Using /lib/usbkbd.o
    usb.c: registered new driver keyboard
    usbkbd.c: :USB HID Boot Protocol keyboard driver
    [04/Dec/2030:15:57:15 +0000] boa: server version Boa/0.94.13
    [04/Dec/2030:15:57:15 +0000] boa: server built Feb 28 2004 at 21:47:23.
    [04/Dec/2030:15:57:15 +0000] boa: starting server pid=37, port 80

    Please press Enter to activate this console.
    BusyBox v0.60.5 (2003.09.05-09:25+0000) Built-in shell (ash)
    Enter 'help' for a list of built-in commands.
    sh: can't access tty; job control turned off

    ???? [root@fa /]#

    如以上信息, 按回车进入系统, 然后运行"bk"命令更新系统内核.

    bk命令其实是一个脚本,该脚本首先使用 imagewrite 对 flash 进行分区, 然后烧写 bootloader 和 kernel. 关于 imaewrite 的使用方法可以参考其帮助信息.

    运行bk命令以进行分区和重新安装vivi及kernel

    bk 执行完毕, 按照提示, 复位系统, 再次使用 nfs 启动系统, 然后使用“bs”(bs也是一个脚本, 请使用任何一种编辑器自行打开查看, )命令先对 flash 进行格式化,再安装根文件系统内容,如下图所示:

    bs命令执行完毕

     
     

    在SBC-2410X上安装嵌入式Linux 所遇到的问题

    今天搞了半天
    宿主机和开发版之间用nfs就是连不通
    后来才想到防火墙的对应端口没有打开...
    于是关掉防火墙~~OK~~~
     
    考虑到我们今天是关掉防火墙做的,
    应该还可以不关防火墙 ,同时打开对应的端口或者是允许某个ip;
    今天做的时候与互联网断开了,明天做的时候准备在保持internet连接的同时通过nfs与开发版连接;
    如此 就要重新配置开发版的ip,并且修改param set的参数了
    (又看了文档,好像还不可能这样做,再试了)
     
    今天在配置好nfs之后 准备更新系统没有成功

    在vivi提示符(我们实际做的时候这里是friendly-arm)模式输入以下命令参数, 使用nfs启动系统:

    param set linux_cmd_line "console=ttyS0 root=/dev/nfs nfsroot=192.168.0.1:/friendly-arm/root ip=192.168.0.69:192.168.0.1:192.168.0.1:255.255.255.0:matrix4.arm9.net:eth0:off"

    然后使用"boot"命令启动系统

     
    进入
    [root@fa /]#
    启动信息与文档提供的信息相同
     
    如以上信息, 按回车进入系统, 然后运行"bk"命令更新系统内核.
     
    执行bk
    复位系统
    便无法再次使用nfs启动系统了
     
    (也许是操作过程有问题,最后这部分不是我做的,不甚清楚,明天再去做)
    另找到一篇详细的文章,一并贴上来,文章有几处不符合我们实际操作的情况...一起修改了..

    宿主机LINUX安装注意事项及NFS的配置

    转自www.hhcn.com

    建议都采用REDHAT系列

    目前华恒所有产品的宿主机平台以REDHAT9.0为标准平台。
    有些手册上所建议的REDHAT7.2,现在都建议采用REDHAT9.0,当然REDHAT7.2/7.3的系统也都是可以用的,但鉴于市面上目前能买到的都是REDHAT9.0,所以建议采用REDHAT9.0

    宿主机配置中一个常见的问题就是NFS的配置,这里介绍一种较为直接简单的方法:
    首先在REDHAT LINUX PC机上执行setup,弹出菜单界面后,选中: System services,回车进入系统服务选项菜单,在其中选中 [*]nfs ,
    然后退出setup界面返回到命令提示符下。
    vim /etc/exports
    将这个默认的空文件修改为只有如下一行内容:(注意中间有空格)
    / ???(rw)
    然后保存退出(:wq),然后执行如下命令:
    /etc/rc.d/init.d/nfs restart
    Shutting down NFS mountd: [ OK ]
    Shutting down NFS daemon: [ OK ]
    Shutting down NFS quotas: [ OK ]
    Shutting down NFS services: [ OK ]
    Starting NFS services: [ OK ]
    Starting NFS quotas: [ OK ]
    Starting NFS daemon: [ OK ]
    Starting NFS mountd: [ OK ]
    这样就一切OK了!

    【注意】
    因NFS不会每次自动启动,即无法像linuxconf命令那样设置成Automatic启动方式,执行如下命令重启NFS服务:
    /etc/rc.d/init.d/nfs restart

    最好把上面一句写入/etc/rc.local文件中,这样每次计算机重新启动就省去每次都要执行上面的命令来启动NFS服务
    配置完成后,可用如下办法简单测试一下NFS是否配置好了:
    在宿主机上自己mount自己,看是否成功就可以判断NFS是否配好了。例如在宿主机/目录下执行:
    mount -o nolock 192.168.2.32:/???/mnt (有时若根目录不让读写,执行chmod 777 / 试试
    然后到/mnt/目录下看是否可以列出/目录下的所有文件和目录,可以则说明mount成功,NFS配置成功。

    但实际上,REDHAT LINUX PC自己mount自己成功也不能完全说明NFS就可以工作了,因为还有一个防火墙的问题,一般的我们建议客户在安装REDHAT LINUX时就默认选择NO FIREWALL,但若客户没有这样选择的话,REDHAT 启动时会加载防火墙规则,这样你自己能 mount 自己,但其它PC和板子也无法mount这台PC。所以这时要运行setup关闭防火墙。注意!setup里面的防火墙显示永远都是HIGH,这个是REDHAT一直的一个小BUG,即使你安装时默认选择了NO FIREWALL,setup里面也照样会显示防火墙设置是HIGH的,这个可以不必理会。只要你选择了一次NO FIREWALL就可以了。关于防火墙等问题,请参见您的光盘里面的PDF手册。另外,建议对LINUX操作不是非常熟悉的客户,务必请阅读我们手册附录的“LINUX常用命令”。

    还有,就是REDHAT还有这样一个问题,就是加入网关设置后,网络建立TCP链接非常慢,例如FTP/TELNET/NFS等都是,建立链接后,以太网通信还是很快的。若您安装网络时加入了网关,就会出现你在板子NFS mount REDHAT PC时,敲入mount -o nolock pcip:/ /mnt后非常长的时间不返回SHELL提示符,就一直停在那里,这就是建立连接的时间非常的长。一般的,遇到这种情况,建议在REDHAT LINUX PC上执行

    route del default

    即去掉网关,然后再进行NFS mount等操作就会非常快了。
    再有,若您用的不是华恒的开发板,那么可能您的busybox可能没有加入NFS mount的支持,这样您就需要重新编译busybox,加入NFS mount支持,然后更新ramdisk,重新烧写即可。

    当然了,测试NFS你必须用以太网将板子和REDHAT LINUX PC连接起来才行,连接的方式有两种:一是板子和PC都用普通的网线接到HUB或者交换机上;二是用交叉网线将板子和PC直连起来,注意!这种网线是特制的,内部收发交换的!

    测试板子和PC网络是否连通的方式是:板子正常启动LINUX后,在minicom里面ping PC看是否能通即可,当然了,用PC来ping板子看是否通也是可以的。 注意:板子必须启动到LINUX后才能ping通,板子处在bootloader阶段一般是无法ping通的,即使这时板子的bootloader初始化了以太网也不行。

    若板子跟PC的网络不通,mount报错信息为:

    # mount -o nolock 192.168.2.211:/ /mnt
    mount: RPC: Unable to receive; eNrno = No route Fo host
    mount: Sfsmount failed::Bad file descriptor
    mount program didn't pass remote address!
    mount: Mounting 192.168.2.211:/ on /mnt failed: Invalid argument

    关于tftp服务安装的问题
    有些客户在安装REDHAT LINUX 时,有时没有选Custom-->Packages里面选择everything,导致没有安装tftp服务(典型的就是安装完成后没有/tftpboot目录,setup-->system services里面也没有tftp选项 ),这时若要重新完全安装就太麻烦了,可如下单独安装改服务:
    <感谢深圳客户廖代国先生和瘦网虫提供资讯>

    安装tftp 的方法: rpm -ivh foo-1.0-2.i386.rpm

    其中foo-1.0-2.i386.rpm在Redhat9的第3张光盘里面。

    弹出光驱的时候,要umount /mnt/cdrom后才可以操作, 否则光驱托盘不会弹出

    July 13

    mplayer在ARM9(s3c2410)上的移植(转)

    在S3C2410嵌入式开发平台上移植了几款linux媒体播放器,感觉播放效果不是很理想,320x240分辨率下的视频播放也不是很流畅,难道200M主频的速度就只能这样了?我开始有点失望了。上个月,当mplayer摘取了年度Linux world 博览会“新媒体”大奖的消息传来,激发了我再次移植mplayer 到2410的决心,尽管前几次移植的结果都不是很成功。

    以前我刚开始在linux下做桌面开发时,就听说mplayer号称linux史上功能最强的媒体播放器,它在桌面上安装起来很方便,简单的configure,make一下,就装好了,和QT的GUI配合,界面还是蛮友好的。Mplayer对媒体格式的广泛支持,以及丰富的后期处理滤镜给我留下深刻印象,最新的版本更支持DIVX,H.264,MPEG4等最新的流媒体格式,可以实时在线播放视频流,这么优秀的播放软件把它移植到嵌入式设备上该多好啊!

    公司里有一块2410的开发板,CPU是三星的S3C2410,arm9的内核,板子做工很精细,以前一直都用它来做开发,买的时候配的是10。4寸的sharp大屏,640X480的分辨率,不错,这样就可以测试在640X480分辨率下的视频播放速度了。硬件平台的问题解决了,下一步下载最新的mplayer源代码包,毕竟最新的源代码包才有最新的功能,当然了BUG估计也是不少的。打开mplayer的官方网站http://www.mplayerhq.hu的主页,可以看到“download”这个链接,点击一下,进入下载页面,在该页面里可以看到“daily CVS snapshot source”的下载部分,这部分链接都指向了每天提交到CVS服务器里最新的mplayer源代码包,鼠标点击一下开始下载!

    1. 开始编译

    下载下来的源代码一般都叫MPlayer-current.tar.bz2的名字,好,开始解包,在命令行下敲以下的命令

    bunzip2 MPlayer-current.tar.bz2 | tar xv –

    查看解包出来的README和INSTALL文件,看看有没有安装时特别声明的东西,这是我的习惯,因为同一个软件的不同版本,安装的方法有时并不一样。然后输入./configure --help看看有没有多出或减少什么选项,还好,没什么变化,于是把以前配置mplayer的命令拿出来,复制,粘贴在命令行上:

    ./configure --cc=arm-linux-gcc --target=arm-armv4-linux --enable-static --prefix=/tmp /mplayer --disable-win32 --disable-dvdread --enable-fbdev --disable-mencoder --disable-live --disable-mp3lib --enable-mad --enable-libavcodec --language=zh_CN

    配置完毕,开始跨平台编译: make

    眼睛盯着编译器反馈的每一个信息,老是担心在哪出错,mplayer的源代码太庞大了,

    又使用到不少第三方的库,谁能保证编译不出问题呢.果然,没编译几下,就停下来了,说什么codec-cfg无法运行,产生不了某某头文件。检查了一下,发现codec-cfg这个可执行文件是最先编译产生的一个文件,这个文件是存在的啊,怎么会执行不了呢?于是手动执行了一下,系统提示“cannot execute binary file”,突然想起来,codec-cfg是按跨平台方式编译的啊,产生的是arm的代码,当然不能在x86上执行了,那就先用不用跨平台编译的方式,先把mplayer编译成x86的代码,于是重新配置,简单的 ./configure, make,然后将生成的

    codec-cfg改名为codec-cfg.x86。然后再按跨平台方式配置,编译,等编译器出现错误停止编译时,将codec-cfg.x86该名为codec-cfg,再make,OK,编译就可以继续进行了。

    在编译期间,还出现了几处错误,都是头文件引用的问题,特别提醒大家的是,在libmpcodecs和libavcodec这两个目录下,有一个疏漏,就是这两个目录的源文件都以

    #incude “config.h” 的方式引用头文件“config.h”,但是在这两个目录下并不存在该头文件“config.h”,这些源文件实际是期望引用mplayer安装包根目录下的“config.h”头文件,

    因此我们需要在libmpcodecs和libavcodec这两个目录下手动建立一个名为config.h的链接并指向mplayer安装包根目录下的“config.h”头文件,建立方法

    $> cd libmpcodecs

    $> ln –s ../config.h config.h

    $> cd ../

    $> cd libavcodec

    $> ln –s ../config.h config.h

    经过几次的编辑修改,终于成功完成对mplayer的编译链接,一看mplayer文件的大小,10M,z这也太太夸张了吧,我还没编译成debug的呢。到目前为止这算是成功的第一步了。

    2.开始调试

    编译出来的代码能正常的在2410上跑吗?心中还是有许多疑问。给板子上电,然后用自己编写的一个网络传输工具将代码传到板子的ramdisk,接着再传上一个10M左右的视频,好了,先不带参数运行mplayer,不错,中文的帮助信息弹出来了,说明程序基本编译对了,这时输入命令 ./mplayer matrix.mpg , 眼睛直盯着屏幕,期待着画面的出现,可惜,在出现了一些视频剪辑的反馈信息后,程序再也不动了,没办法,按CTRL+C结束程序,然后就提示出现段错误。以前听说有linux嵌入式的爱好者移植时也出现这样的错误,但是如果不播放声音时,图像可以出现,于是输入命令 ./mplayer -nosound matrix.mpg,这时画面出来了,这个320x240大小的从网上下载的视频,播放起来相当流畅,好像比平时看的影碟机解码速度还快,那当然了,毕竟是320x240大小,又没声音解码的。

    声音这块不解决,当然是不能说移植成功的,因为mplayer还支持那么多格式的音频解码。但是问题究竟出在哪里呢?用排除法吧!找一个未经任何音频压缩的WAV音频文件,其时就是PCM文件,上传到ramdisk,然后用mplayer播放,还是出现一样的问题,程序死了。好了,这就说明问题并非出现在音频解码部分,极有可能出现在音频流的播放部分。现在市面上大多数的嵌入式开发板的音频驱动是oss规范的驱动,以前自己做过oss的编程,对这块还是比较熟悉。于是开始查看mpalyer,c源文件,看看它是如何实现音频流播放的,

    在音频播放部分它使用到了libao2库的音频播放/控制模块,通过进一步查看ao_oss.c源代码进一步获知mplayer是如何与音频的linux驱动工作的。这一步弄清楚后,重新编译mplayer,打开debug选项,打开调试字符串输出,并在音频播放处设置多处断点,并加上printf语句输出一些变量内容,最终发现在调用ao_oss.c的play()函数时出现除零出错,

    这个问题产生的根源最终追溯到音频的驱动部分。现在大部分的嵌入式板子都使用菲利普uda1341音频芯片,因而也都使用了相同一个音频驱动,即MIZI公司拥有版权的linux uda1341音频驱动,这个驱动基本上符合了oss的规范,但是当使用到多段DMA音频数据传输时,出现了一个问题,即DMA缓冲的建立发生在第一次调用write()函数将音频数据传送到设备描述符的时候,然而oss驱动的调用者通常要在打开音频设备描述时候,就期望获取DMA缓冲的信息,然而因为缓冲尚未建立,因而返回缓冲大小为0这个结果。

    解决的办法是在音频驱动源码的smdk2410_audio_open()函数体,加上如下一段代码,

    if (!output_stream .buffers && audio_setup_buf(&output_stream))

    return -ENOMEM;

    添加的位置具体见以下代码的粗体部分:

    static int smdk2410_audio_open(struct inode *inode, struct file *file)

    {

    int cold = !audio_active;

    DPRINTK("audio_openn");

    if ((file->f_flags & O_ACCMODE) == O_RDONLY) {

    if (audio_rd_refcount || audio_wr_refcount)

    return -EBUSY;

    audio_rd_refcount++;

    } else if ((file->f_flags & O_ACCMODE) == O_WRONLY) {

    if (audio_wr_refcount)

    return -EBUSY;

    audio_wr_refcount++;

    } else if ((file->f_flags & O_ACCMODE) == O_RDWR) {

    if (audio_rd_refcount || audio_wr_refcount)

    return -EBUSY;

    audio_rd_refcount++;

    audio_wr_refcount++;

    } else

    return -EINVAL;

    if (cold) {

    audio_rate = AUDIO_RATE_DEFAULT;

    audio_channels = AUDIO_CHANNELS_DEFAULT;

    audio_fragsize = AUDIO_FRAGSIZE_DEFAULT;

    audio_nbfrags = AUDIO_NBFRAGS_DEFAULT;

    if ((file->f_mode & FMODE_WRITE)){

    init_s3c2410_iis_bus_tx();

    audio_clear_buf(&output_stream);

    // 加上以下这行代码

    if (!output_stream .buffers && audio_setup_buf(&output_stream))

    return -ENOMEM;

    }

    if ((file->f_mode & FMODE_READ)){

    init_s3c2410_iis_bus_rx();

    audio_clear_buf(&input_stream);

    }

    }

    MOD_INC_USE_COUNT;

    return 0;

    }

    改完驱动后,重新编译内核。

    3结论

    mplayer因为直接使用缓冲帧,或者使用别的什么优化的算法,使得在ARM S3C2410视频播放速度得到显著提高,至少在320x240大小,解压mpeg1或2标准的视频时速度是相当流畅的,但是mpeg4解码速度仍显不足。Arm s3c2410的cpu属于精简指令,定点计算,

    无MMX,无硬件浮点计算,因而对大尺寸多媒体编解码的能力仍显不足。业界的解决办法是在CPU外增加硬编解码的DSP,或者在SOC内增加协处理器以加强这方面的功能。

    后记

    在得知xscale PXA255面世后,我决定用将移植好的mplayer拿给他们在板子上测试。mpeg4编码,画面大小为320x240的视频播放已经相当流畅,这也许就是那些市面上用PXA255 CPU做的PDA播放DIVX视频的效果吧!

    July 12

    写给所有的IT民工?

    今天看了一篇文章,来自------

          http://searchexchange.techtarget.com.cn/itexpert/449/2478949.shtml

    里面有一段话

         

      平均年龄(这个开始我还用计算机算,很笨的说,后来用excel 直接就可以拿到)31,最小的25, 最大的42,跳槽的频率是2次,也就是4年跳一次,一般IBM, HP 的时间都有7-8的,不过其它的2年多的, 2年以下的很少,到经理级别的26-29最多,所以27(一般工作2-4年)是大家的一道坎, 这个时候跳一下,promote 到经理级,以后机会就不多了,然后是32—35 又一到坎 能promote 到director, 这关过不去,那么你在小经理这边呆着吧。。。慢慢熬时间拿点福利, 35也是一个Promote 到 VP, GM 的最好时间, 一般过了40猎头不会推荐你的, 除非你特牛(特牛的人年纪对他没有障碍。

     

    想想我多大了 --||

     

    想想虽然我多半是不适合做管理的

    嘿嘿

    June 10

    图片没有了

    硬盘用PQ分区失败...
    挂掉了C:和F:
    懒的恢复...于是多年的收集全部丢失...
    图片.经典的动画片..等等全部离我而去
    接着发现msn的头头也不能换了
    无语...
    April 26

    数据库规范化技巧

          在设计数据库时,最重要的步骤是要确保数据正确分布到数据库的表中。使用正确的数据结构,可以极大地简化应用程序的其他内容(查询、窗体、报表、代码等)。正确进行表设计的正式名称是数据库规范化

             本文简要介绍数据库规范化的基本概念和一些需要注意并力求避免的常见问题。

    理解您的数据

            在设计表之前,应明确您打算如何处理数据,还要了解随着时间的推移数据会发生什么样的变化。您所做的假设将会影响最终的设计。

    您需要什么样的数据?

             设计应用程序时,关键要了解设计的最终结果,以便确保您准备好所有必需的数据并知道其来源。例如,报表的外观、每个数据的来源以及所需的所有数据是否都存在。对项目损失最大的莫过于在项目后期发现重要报表缺少数据。

             知道需要什么样的数据后,就必须确定数据的来源。数据是否从其他数据源中导入?数据是否需要清理或验证?用户是否需要输入数据?

             明确所需数据的类型和来源是数据库设计的第一步。

    您打算如何处理这些数据?

             用户是否需要编辑这些数据?如果需要,应如何显示数据以便于用户理解和编辑?有没有验证规则和相关的查找表?要求对编辑和删除保留备份的数据输入有没有相关联的审核问题?需要为用户显示哪些摘要信息?是否需要生成导出文件?了解这些信息后,就可以想象字段之间是如何相互关联的了。

    数据之间如何相互关联?

             将数据分组放入相关字段(例如与客户相关的信息、与发票相关的信息等),每个字段组都代表要建立的表。然后考虑如何将这些表相互关联。例如,哪些表具有一对多关系(例如,一个客户可能持有多张发票)?哪些表具有一对一关系(这种情况下,通常会考虑将其组合到一个表中)?

    随着时间的推移数据会发生什么样的变化?

             设计表之后,常常会由于没有考虑时间的影响而导致以后出现严重问题。许多表设计在当时使用时效果非常好,但是,常常会因为用户修改数据、添加数据以及随时间的推移而崩溃。开发人员经常会发现需要重新设计表的结构来适应这些变化。表的结构发生变化时,所有相关的内容(查询、窗体、报表、代码等)也必须随之更新。理解并预测数据会随时间推移发生哪些变化,可以实现更好的设计,减少问题的发生。

    学习如何使用查询

             了解如何分析和管理数据同样很重要。您应该深刻理解查询的工作原理,理解如何使用查询在多个表之间链接数据,如何使用查询对数据进行分组和汇总,以及如何在不需要以规范化格式显示数据时使用交叉表查询。

             好的数据设计的最终目标就是要平衡两个需要:既要随着时间的推移有效地存储数据,又要轻松地检索和分析数据。理解查询的功能对正确设计表很有帮助。

    数据库规范化概念

             这部分介绍数据库规范化所涉及的基本概念,而不是对数据库规范化进行理论性的探讨。如何在您的实际情况中应用这些概念可能会随着应用程序需要的不同而有所变化。这部分的目的是理解这些基本概念、根据实际需要应用它们,并理解偏离这些概念将会出现哪些问题。

    将唯一信息存储在一个地方

             大部分数据库开发人员都理解数据库规范化的基本概念。理想情况下,您希望将相同的数据存储在同一个地方,并在需要引用时使用 ID 来进行引用。因此,如果某些信息发生了变化,则可以在一个地方进行更改,而整个程序中的相应信息也会随之更改。

             例如,客户表会存储每个客户的记录,包括姓名、地址、电话号码、电子邮件地址以及其他特征信息。客户表中可能包含唯一的 CustomerID 字段(通常是 Autonumber 字段),这个字段即该表的主键字段,其他表使用它来引用该客户。因此,发票表可以只引用客户的 ID 值,而不是在每张发票中存储客户的所有信息(因为同一个客户可能会持有多张发票),这样利用客户的 ID 值即可从客户表中查找客户的详细信息。使用 Access 中功能强大的窗体(使用组合框和子窗体),可以轻松地完成这项工作。如果需要修改客户信息(例如新增电话号码),只需在客户表中修改,应用程序中引用该信息的任何其他部分都会随之自动更新。

             使用正确规范化的数据库,通过简单的编辑即可轻松处理数据随时间推移而发生的更改。使用未正确规范化的数据库,通常需要利用编程或查询来更改多条记录或多个表。这不仅会增加工作量,还会增加由于未正确执行代码或查询而导致数据不一致的可能性。

    记录是免费的,而新字段非常昂贵

             理想的数据库应该只需要随着时间的推移添加新的记录,数据库表应该能够保存大量记录。但是,如果您发现需要增加更多字段,则可能会碰到设计问题。

             电子表格专家经常会遇到上述问题,因为他们习惯于按照设计电子表格的方式设计数据库。设计经常随时间变化的字段(例如,年、季度、产品和销售人员)需要在将来添加新字段。而正确的设计应该是转换信息并将随时间变化的数据放在一个字段内,这样就可以添加更多记录。例如,只需创建字段,然后在该字段中输入各记录相应的年份值即可,无需为每年创建一个单独的字段。

             增加额外的字段可能会产生问题,因为表结构的变化会对应用程序的其他部分产生影响。在表中添加更多字段时,依赖该表的对象和代码也需要更新。例如,查询需要获取额外的字段,窗体需要显示这些字段,而报表则需要包含这些字段,等等。但是,如果数据已经规范化,则现有对象会自动检索新数据,并正确计算或显示这些数据。查询功能尤其强大,因为它允许您按字段进行分组,以逐年显示摘要(不管表中包含哪些年份)。

             但是,数据规范化并不意味着不能显示或使用随时间而变化或依赖时间的字段。需要浏览或显示这类信息的开发人员通常可以使用交叉表查询来达到这一目的。如果您不熟悉交叉表查询,应该学习如何使用它们。虽然它们与表有所不同(尤其是用户无法编辑交叉表查询的结果),但它们的确可以用于在数据表中显示信息(最多可以达到 255 个字段)。如果要在报表中使用它们,则会更加复杂,因为报表需要包含额外的或不断变化的字段名。这就是为什么大多数报表将数据作为独立的分组(而不是独立的列)显示的原因。对于那些别无选择的情况,您必须花时间去解决这个问题。希望所有人都能够理解这种决定会随着时间的变化对其他资源产生的影响。

             这就是为什么增加记录是免费的(这是数据库的巨大优势)而增加字段是如此昂贵的原因。如果数据库设计正确,则可以适应各种各样的变化。

    了解何时需要复制数据

             有时数据需要反规范化,以便保存可能会随时间变化的信息。

             在通过客户 ID 号将发票链接到客户表的简单示例中,我们可能需要保留开出发票时的客户地址(而不是制作发票时的地址,因为客户信息在这两个事件之间可能会有所变化)。如果开出发票时未保留客户地址,而将来又必须更新客户信息,则可能无法确定发送某些发票的确切地址。这可能会导致非常严重的商业问题。当然,有些信息(如客户的电话号码)可以不保存。因此,应该有选择地决定需要复制哪些数据。

             需要复制数据的另一个例子是填写发票的明细项。报价单通常用于挑选客户订购的商品。我们可以只存储报价单 ID,而 ID 指向包含产品说明、价格和其他详细信息的报价单。但是,产品说明和价格会随着时间而改变。如果不将数据从报价单复制到明细表中,将来则无法准确地重新打印原始发票。如果您尚未收到付款,问题将非常严重。

             因此,虽然规范化可以将相同的数据很好地保存在一个地方并能简化编辑工作,但某些情况下却不需要这些优势。如果以后由于历史原因需要数据的快照,则必须从一开始就在数据库中设计好。否则,一旦数据被覆盖就无法再找回。

    使用没有确切含义的字段作为主键字段

            为了提高效率,每个表都应该有一个主键字段。主键字段定义了在表中的唯一性,并由索引在其他字段中使用,以提高搜索性能。例如,客户表可以包含为每个客户定义唯一编号的 CustomerID 字段。为了便于讨论,假定表中包含多个字段,而不仅仅是简单的单一表查找(例如国家/地区列表)。

              一般来说,主键字段应具有如下特征:

    应该只包含一个字段

             可以将多个字段定义为表的主键字段,但最好是使用一个字段。首先,如果需要使用多个字段来定义唯一性,则需要占用更多的空间来存储主键。其次,表中的其他索引还必须使用主键字段的组合,这样所占用的空间比使用一个字段所占用的空间要多。最后,在表中标识记录需要获取字段组合。使用一个 CustomerID 字段定义客户比使用其他字段组合要好得多。 

    应该为数字类型

             Access 提供的 AutoNumber 字段类型是一个 Long Integer(长整数),非常适用于主键字段。这些值可以自动保证每个记录的唯一性,同时也支持多用户数据输入。

    不会随时间而改变

              主键字段不应该随时间而改变。一旦标识了主键字段,就应该永远不变(象社会保障号一样)。更改过的主键字段将很难再使用历史数据,因为其中的链接被破坏了。

    应该没有确切含义

            要确保主键字段不会随时间而更改,它应该没有确切含义。没有确切含义的主键值在其他数据不完整时也非常有用。例如,您可以指定一个客户编号,而无需该客户的完整地址。应用程序的其余部分可以很好地工作,您也可以在检索记录时添加信息。如果表中使用了国家/地区字段或其他您没有的标识字段作为主键的一部分,则很可能会导致无法使用应用程序。

            鉴于上述原因,我们建议在大部分表中使用 AutoNumber 字段作为主键字段。通过使用组合框和隐藏列,可以将字段绑定到 AutoNumber 字段并将其隐藏,使用户无法看到。

    使用引用完整性

            对表进行定义并理解各表是如何关联的之后,请确保添加引用完整性来巩固各表之间的关系。这样可以避免错误地修改链接字段而留下孤立的记录。Microsoft Jet 数据库引擎支持复杂的引用完整性,允许用户进行级联更新和删除。一般情况下,不应修改 ID 字段。因此,级联更新用得较少,但级联删除却非常有用。

            例如,如果发票表与订单表相关联,其中的一张发票可能有无限多个订单(明细项),并且每个订单记录包含它所链接的发票编号,则可以使用级联删除操作来删除发票记录,并自动删除所有相应的订单记录。这样可以避免出现没有相应发票记录的订单记录。