求助映像文件的制作。
我从网上下载了 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上发帖子,或者给我发邮件[email protected] 我已经在skyeye.conf里面修改了。但是还是不行。
我察看了my.img和 ywcromfs-minigui.img文件,好像他们的格式不一样。
我不知道生成img文件的正确方法是啥?
请各位高手指点指点。
cp -r /mnt/test /usr/test
用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) {
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 = { {
.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的,内容提要里说的好听,真正的内容都是网上摘的,气死了
页:
[1]