求助映像文件的制作。我从网上下载了 skyeye-binary-testutils-1.0.7的例子。我从ep7312_with_framebuffer_touchscreen_minigui中得到ywcromfs-minigui.img文件。 我自己编译了linux-2.4.13的内核,打上了所有的补丁之后,生成了vmlinux文件,然后和ywcromfs_minigui.img文件放在同一个目录下面,使用skyeye可以正常工作。 但是我要加入自己的程序,所以就需要重新制作img文件。但是我不知道该怎样去做。 所以我就想在ywcromfs-minigui.img文件中加入自己的程序。 做法如下: mount -o loop ywcromfs-minigui.img /mnt/test cp -r /mnt/test /usr/test 然后我在/usr/test目录中加入了自己的程序. 最后我重新生成一个新的映像文件。 genromfs -d /usr/test -f my.img 但是当我使用my.img和vmlinux配合使用的时候,skyeye就会出错。 错误提示:Kernel panic: No init found.Try passing init= option to kernel. at panic.c :103. 我猜想是kernel没有找到init程序。但是init程序就在/bin /sbin目录中。 应该是我创建img的方法不对。 请斑竹及各位高手帮我看看。我暂时还是一个初学者。多谢了!! 希望春节前解决这个问题,然后就可以移植minigui了。 修改skyeye.conf 用my.img 替换文件中的ywcromfs-minigui.img 我做过minigui 2 ep7312 lubbock的移植,碰到问题可以到minigui的论坛www.minigui.org上发帖子,或者给我发邮件ywc02@mails.tsinghua.edu.cn 我已经在skyeye.conf里面修改了。但是还是不行。 我察看了my.img和 ywcromfs-minigui.img文件,好像他们的格式不一样。 我不知道生成img文件的正确方法是啥? 请各位高手指点指点。 [quote] cp -r /mnt/test /usr/test [/quote] 用cp -dpR /mnt/test /usr/test 试试 多谢各位朋友。 我试了。但是还是不行。 不知道你们用的genromfs的版本。 我是从网上下载的genromfs-0.5.1-1.i386.rpm. 真是弄不明白了。 经过几天的努力,这个问题解决了。下面是我的做法。 可能有些理解不是很对,但是确实可行。希望能够对大家有些帮助。 如何制作根文件系统? 建立如下的script脚本文件 #!/bin/sh dd if=/dev/zero of=/dev/ram bs=1k count=2048 // 2048表示2M.用户可以自己设定实际的数值。申请内存空间 mke2fs -vm0 /dev/ram 2048 //将内存空间转换成ext2文件系统 mount -t ext2 /dev/ram /mnt/ramdisk //mount文件系统 cp -avUserDir /mnt/ramdisk //向文件系统中写入用户的各种文件 genromfs –v –V “ROMdisk” –d /mnt/ramdisk –f my.img //制作根文件系统的映像文件 umount /mnt/ramdisk //umount文件系统 dd if=/dev/ram bs=1k count=2048 //释放内存空间 my.img就是根文件系统。可以配合skyeye使用了。 楼主,很感谢你的经验共享 我想请教一个问题:就是uclinux 启动时,他怎么知道根文件系统在哪里的? :oops: ,疑惑很长时间了 在编译内核时,可以配置 CONFIG_CMDLINE="root=/dev/rom" //ROMDisk 或root=/dev/ram //RAMDisk 或root=/dev/mtdblock* //基于mtd驱动的文件系统,例如JFFS2 或root=/dev/nfs //NFS文件系统 挂载根文件系统的源代码在linux/init/do_mounts.c中 /* * Prepare the namespace - decide what/where to mount, load ramdisks, etc. */ void __init prepare_namespace(void) { int is_floppy; mount_devfs(); md_run_setup(); if (saved_root_name[0]) { root_device_name = saved_root_name; ROOT_DEV = name_to_dev_t(root_device_name); if (strncmp(root_device_name, "/dev/", 5) == 0) root_device_name += 5; } is_floppy = MAJOR(ROOT_DEV) == FLOPPY_MAJOR; if (initrd_load()) goto out; if (is_floppy && rd_doload && rd_load_disk(0)) ROOT_DEV = Root_RAM0; mount_root(); out: umount_devfs("/dev"); sys_mount(".", "/", NULL, MS_MOVE, NULL); sys_chroot("."); security_sb_post_mountroot(); mount_devfs_fs (); } void __init mount_root(void) { #ifdef CONFIG_ROOT_NFS if (MAJOR(ROOT_DEV) == UNNAMED_MAJOR) { if (mount_nfs_root()) return; printk(KERN_ERR "VFS: Unable to mount root fs via NFS, trying floppy.\n"); ROOT_DEV = Root_FD0; } #endif #ifdef CONFIG_BLK_DEV_FD if (MAJOR(ROOT_DEV) == FLOPPY_MAJOR) { /* rd_doload is 2 for a dual initrd/ramload setup */ if (rd_doload==2) { if (rd_load_disk(1)) { ROOT_DEV = Root_RAM1; root_device_name = NULL; } } else change_floppy("root floppy"); } #endif create_dev("/dev/root", ROOT_DEV, root_device_name); mount_block_root("/dev/root", root_mountflags); } 谢谢你 :arrow: 我说的不是这些 我所指的是,在uclinux中生成的romfs.img,它保存在FLASH上的地址应该不是随意的吧,我 想问的就是,内核怎么知道这个romfs.img在哪里的? :!: :!: 顶一下了 是说 那个文件系统的镜像,内核怎么知道那个镜像在哪的? :idea: 谢谢 我说一下我熟悉的Lubbock开发板的Flash分区在内核中的设置: static struct map_info lubbock_maps[2] = { { .size = WINDOW_SIZE, .phys = 0x00000000, .inval_cache = lubbock_map_inval_cache, }, { .size = WINDOW_SIZE, .phys = 0x04000000, .inval_cache = lubbock_map_inval_cache, } }; static struct mtd_partition lubbock_partitions[] = { { .name = "Bootloader", .size = 0x00040000, .offset = 0, .mask_flags = MTD_WRITEABLE /* force read-only */ },{ .name = "Kernel", .size = 0x00100000, .offset = 0x00040000, },{ .name = "Filesystem", .size = MTDPART_SIZ_FULL, .offset = 0x00140000 } }; 如果采用的是RAMdisk则设置 CONGIG_CMDLINE="root=/dev/ram rw initrd=0xa1000000,0x00800000 console=ttyS0,115200 mem=64M" 其中initrd=0xa1000000就是内核启动时挂载根文件系统的位置,事先在skyeye.conf中配置 mem_bank: map=M, type=RW, addr=0xa1000000, size=0x00800000, file=./initrd4M.img 这样SkyEye运行target sim时就将镜像装入模拟的RAM中的0xa1000000开始的空间 不知道我目前了解的这点信息对你到uClinux源码中寻找答案是否有帮助。 :arrow: 很是感谢你 initrd=0xa1000000 可这个参数内核是怎么知道的? 否则内核也没法把位于这个地方的RAMDISK镜像弄到内存 是不是由引导文件告诉内核的? 可又不怎么对,因为有的uclinux编译后直接把roomfs.img和内核连接在一起了 那连在一起的时候roomfs.img的地址又怎么确定? 问题多多,现在自己的电脑又不在边上。唉,更惨的是,昨天买了本垃圾书,关于uclinux的,内容提要里说的好听,真正的内容都是网上摘的,气死了 |
|
来自: danydany_ok > 《uclinux》