免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1632 | 回复: 0
打印 上一主题 下一主题

停在Freeing init memory: 92K,sys_open无法结束 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-21 10:44 |只看该作者 |倒序浏览

                                (转)http://blog.sina.com.cn/s/blog_5592d0620100034s.html

http://www.kernel.org
下载 2.6.15.4 的内核,
ftp://ftp.handhelds.org/projects ... x-gcc-3.4.1.tar.bz2下载交叉编译工具
修改Makefile
注释掉以下内容:
#ARCH   ?= $(SUBARCH)
#CROSS_COMPILE      ?=
增加如下内容:
ARCH     : = arm
CROSS_COMPILE =/usr/local/arm/3.4.1/bin/arm-linux-
修改arch\arm\mach-s3c2410\devs.c文件
增加头文件定义
/***********add here***********/
#include
               
#include
               
#include
/**************end add********/
增加nand flash分区信息
/*****************************add here***************************/
static int chip0_map[] = { 0 };
struct mtd_partition s3c_nand_part[] = {
[0] = {
.name = "vivi",
.offset = 0x00000000,
.size = 0x00020000,
},
[1] = {
.name = "param",
.offset = 0x00020000,
.size = 0x00010000,
},
[2] = {
.name = "kernel",
.offset = 0x00030000,
.size = 0x001d0000,
},
[3] = {
.name = "root",
.offset = 0x00200000,
.size = 0x03dfc000,
}
};
static struct s3c2410_nand_set s3c_nand_sets[] = {
[0] = {
.name = "chip0",
.nr_chips = 1,
.nr_map = chip0_map,
.nr_partitions = ARRAY_SIZE(s3c_nand_part),
.partitions = s3c_nand_part
}
};
static struct s3c2410_platform_nand s3c_nand_info = {
.tacls = 0,
.twrph0 = 30,
.twrph1 = 0,
.nr_sets = ARRAY_SIZE(s3c_nand_sets),
.sets = s3c_nand_sets,
};
/********************************end add****************************/
struct platform_device s3c_device_nand = {
        .name                  = "s3c2410-nand",
        .id                  = -1,
        .num_resources          = ARRAY_SIZE(s3c_nand_resource),
        .resource          = s3c_nand_resource,
/***********add here****************/
        .dev = {
        .platform_data = &s3c_nand_info
        }
/**************end here************/
};
可以交叉编译内核了
make mrproper //清楚所有config信息
make clean  //清楚中间代码
make smdk2410_defconfig  //使用默认2410配置
make menuconfig  //配置
make
内核配置选择:
用NFS做根文件系统并配置网络:
主机上配置好NFS和DHCP服务
编译内核选择
Networking  --->     
  
  • Networking support
            Networking options  --->   
                   
  •    IP: kernel level autoconfiguration
                   
  •      IP: DHCP support
                   
  •      IP: BOOTP support
    File systems  --->      
        Network File Systems  --->
           
  • NFS file system support
           
  •    Provide NFSv3 client support
           
  •      Provide client support for the NFSv3 ACL protocol extension
           
  •    Provide NFSv4 client support (EXPERIMENTAL)
           
  •    Allow direct I/O on NFS files (EXPERIMENTAL)
            [ ] NFS server support
           
  • Root file system on NFS                          
    网卡驱动:
    在下面的网址下载sunshiyou做好的dm9000x.c驱动
    http://www.hhcn.com/cgi-bin/topic.cgi?forum=3&topic=101&start=12&show=0
    拷贝到drivers/net/arm目录下改名为dm9000.c
    我这个开发板用的是EINT0,而2.6内核不能使用这个,所以把EINT0和EINT1焊到一起,驱动里面用的是EINT1。
    修改drivers/net/arm/目录下的Kconfig文件,在最后添加如下内容:
    Config ARM_DM9000
            tristate "DM9000 for ARM support"
            depends on NET_ETHERNET && ARM && ARCH_SMDK2410
            help
    Support for CS8900A chipset based Ethernet cards. If you have a network
    (Ethernet) card of this type, say Y and read the Ethernet-HOWTO,
    available from as well as.To compile this driver as a module, choose M
    here and read.The module will be called cs8900.o.
    修改drivers/net/arm/目录下的Makefile文件,在最后添加如下内容:
    obj-$(CONFIG_ARM_DM9000)    += dm9000.o
    编译内核选择:
    Device Drivers  --->
            Network device support  --->
                      Ethernet (10 or 100Mbit)  --->
                           
  •    DM9000E suport for ARM
    linux_cmd_line 配置为 noinitrd root=/dev/nfs nfsroot=192.168.1.130:/mnt/arm nfsaddrs=192.168.1.160 init=/linuxrc console=ttySAC0
    在/mnt/arm目录放一个可用的文件系统(我是用cramfs文件解开的)
    目前为止网卡已经驱动,并可以挂载上NFSROOT了但内核启动到释放内存就不动了,也没有出错信息。
    内核启动到释放内存就不动了:
    VFS: Mounted root (cramfs filesystem) readonly.
    Freeing init memory: 92K
    对内核代码init/main.c进行跟踪:
            if (execute_command) {
    printk("***********0\n" );
                    run_init_process(execute_command);
    printk("***********2\n" );
                    printk(KERN_WARNING "Failed to execute %s.  Attempting "
                                            "defaults...\n", execute_command);
    printk("***********3\n" );
            }
    printk("***********4\n" );
            run_init_process("/sbin/init");
            run_init_process("/etc/init");
            run_init_process("/bin/init");
            run_init_process("/bin/sh");
    printk("***********5 \n");
            panic("No init found.  Try passing init= option to kernel.");
    屏幕打印:
    VFS: Mounted root (cramfs filesystem) readonly.
    Freeing init memory: 92K
    ***********0
    linux_cmd_line 去掉init=/linuxrc项,屏幕打印:
    VFS: Mounted root (cramfs filesystem) readonly.
    Freeing init memory: 92K
    ***********4
    说明run_init_process函数 有问题
    在网上一个maillist里看到解决方法:
    Hi,
    Kulkarni, Ganapatrao P. IN BLR SISL wrote:
    [...]
    > I am trying to boot the kernel, its comes up and hangs at the end
    > (hangs after "Freeing init memory: 64K"), I am not getting the shell
    > on the minicom.
    >
    > Anybody faced such problem??
    > Any solution/workaround ... Please
    If you have activated "FastFPE math emulation" im kernel config then
    try to use the "NWFPE math emulation" (section "General setup" in
    menuconfig).
    I had the same problem a few weeks ago and solved it on this way (FastFPE seems to be not implemented).
    [...]
    Regards,
    Wolfgang Schriebl
    更改选项重新编译内核烧进板子重启:
    mount: Mounting none on /root failed: Invalid argument
    mount: Mounting none on /tmp failed: Invalid argument
    mount: Mounting none on /var failed: Invalid argument
    mkdir: Cannot create directory `/var/lib': Read-only file system
    mkdir: Cannot create directory `/var/run': Read-only file system
    mkdir: Cannot create directory `/var/log': Read-only file system
    Please press Enter to activate this console.
    BusyBox v1.00 (2006.01.11-14:20+0000) Built-in shell (ash)
    Enter 'help' for a list of built-in commands.
    -sh: can't access tty; job control turned off
    id: unknown uid 0
    [@(none) /]#
    成功进入Shell。
    上面的方法我没成功?????????????
    把[] Use the ARM EABI to compile the kernel选上可以,我是成功了
                   
                   

    本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/75045/showart_1905238.html
  • 您需要登录后才可以回帖 登录 | 注册

    本版积分规则 发表回复

      

    北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
    未成年举报专区
    中国互联网协会会员  联系我们:huangweiwei@itpub.net
    感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

    清除 Cookies - ChinaUnix - Archiver - WAP - TOP