免费注册 查看新帖 |

Chinaunix

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

嵌入式linux如何读文件系统 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-07-10 22:42 |只看该作者 |倒序浏览
比方说我现在有kernel和文件系统image都放在flash,
kernel boot起来之后,怎么通知它文件系统在哪儿呢?
PC上直接在grub里制定root=/dev/hdaX就行了
嵌入式系统怎么制定呢?
谢谢

论坛徽章:
0
2 [报告]
发表于 2007-07-11 09:08 |只看该作者
其起始地址是在boot loader中的一个文件设置的。比方说你用的是s3c2410,而bootloader是vivi,那么是在vivi\arch\s3c2410\smdk.c设定的。所以要将image烧写在其固定的起始地址。

论坛徽章:
0
3 [报告]
发表于 2007-07-11 19:07 |只看该作者
这样不是恨不灵活?
kernel在flash里的地址也要这样写,然后重新编译bootlaoder,而且不一定所有bootloader都支持把?
能不能像硬盘那样直接分区,然后通过bootloader告诉kernel从哪个分区启动?

论坛徽章:
0
4 [报告]
发表于 2007-07-12 09:14 |只看该作者
没有像硬盘那样的直接分区。
其实我觉得pc的分区本质上和嵌入式系统的手动分配地址是一样的。只不过分区更方便一点。

论坛徽章:
0
5 [报告]
发表于 2007-07-12 09:58 |只看该作者
你所谓的“手动分配地址”是指在load kernel或是root filesys的时候指定地址?
我想应该不用在编译时定下来吧

论坛徽章:
0
6 [报告]
发表于 2007-07-12 17:27 |只看该作者
  1. #include "config.h"
  2. #include "machine.h"
  3. #include "vivi.h"
  4. #include "priv_data.h"
  5. #include "mtd/map.h"
  6. #include "boot_kernel.h"
  7. #include "command.h"
  8. #include "time.h"

  9. #ifdef CONFIG_S3C2410_NAND_BOOT
  10. mtd_partition_t default_mtd_partitions[] = {
  11.         {
  12.                 name:                "vivi",
  13.                 offset:                0,
  14.                 size:                0x00020000,
  15.                 flag:                0
  16.         }, {
  17.                 name:                "param",
  18.                 offset:                0x00020000,
  19.                 size:                0x00010000,
  20.                 flag:                0
  21.         }, {
  22.                 name:                "kernel",
  23.                 offset:                0x00030000,
  24.                 size:                0x000C0000,
  25.                 flag:                0
  26.         }, {
  27.                 name:                "root",
  28.                 offset:                0x00100000,
  29.                 size:                0x00140000,
  30.                 flag:                MF_BONFS
  31.         }
  32. };
  33. #endif
  34. #ifdef CONFIG_S3C2410_AMD_BOOT
  35. mtd_partition_t default_mtd_partitions[] = {
  36.         {
  37.                 name:                "vivi",
  38.                 offset:                0,
  39.                 size:                0x00020000,
  40.                 flag:                0
  41.         }, {
  42.                 name:                "param",
  43.                 offset:                0x00020000,
  44.                 size:                0x00010000,
  45.                 flag:                0
  46.         }, {
  47.                 name:                "kernel",
  48.                 offset:                0x00030000,
  49.                 size:                0x000C0000,
  50.                 flag:                0
  51.         }, {
  52.                 name:                "root",
  53.                 offset:                0x00100000,
  54.                 size:                0x00140000,
  55.                 flag:                MF_BONFS
  56.         }
  57. };
  58. #endif
  59. int default_nb_part = ARRAY_SIZE(default_mtd_partitions);

  60. #ifdef CONFIG_S3C2410_NAND_BOOT
  61. #define MT_S3C2410        MT_SMC_S3C2410
  62. #endif
  63. #ifdef CONFIG_S3C2410_AMD_BOOT
  64. #define MT_S3C2410        MT_NOR_FLASH
  65. #endif
  66. vivi_parameter_t default_vivi_parameters[] = {
  67.         { "mach_type",                        MACH_TYPE,        NULL },
  68.         { "media_type",                        MT_S3C2410,        NULL },
  69.         { "boot_mem_base",                0x30000000,        NULL },
  70.         { "baudrate",                        UART_BAUD_RATE,        NULL },
  71.         { "xmodem_one_nak",                0,                NULL },
  72.         { "xmodem_initial_timeout",        300000,                NULL },
  73.         { "xmodem_timeout",                1000000,        NULL },
  74.         { "ymodem_initial_timeout",        1500000,        NULL },
  75.         { "boot_delay",                        0x1000000,        NULL }
  76. };
  77. int default_nb_params = ARRAY_SIZE(default_vivi_parameters);

  78. char linux_cmd[] = "noinitrd root=/dev/bon/2 init=/linuxrc console=ttyS0";

  79. void set_vpp(struct map_info *map, int vpp)
  80. {
  81. }

  82. void set_gpios(void)
  83. {
  84.         GPACON  = vGPACON;
  85.         GPBCON  = vGPBCON;
  86.         GPBUP   = vGPBUP;
  87.         GPCCON  = vGPCCON;
  88.         GPCUP   = vGPCUP;
  89.         GPDCON  = vGPDCON;
  90.         GPDUP   = vGPDUP;
  91.         GPECON  = vGPECON;
  92.         GPEUP   = vGPEUP;
  93.         GPFCON  = vGPFCON;
  94.         GPFUP   = vGPFUP;
  95.         GPGCON  = vGPGCON;
  96.         GPGUP   = vGPGUP;
  97.         GPHCON  = vGPHCON;
  98.         GPHUP   = vGPHUP;
  99.         EXTINT0 = vEXTINT0;
  100.         EXTINT1 = vEXTINT1;
  101.         EXTINT2 = vEXTINT2;
  102. }

  103. int board_init(void)
  104. {
  105.         init_time();
  106.         set_gpios();

  107.         return 0;
  108. }

  109. extern user_command_t cpu_cmd;
  110. int misc(void)
  111. {
  112.         add_command(&cpu_cmd);
  113.         return 0;
  114. }
复制代码

这是bootloader的一部分代码。要手动分配地址,要在这里修改。
如果你问内核如何读文件系统,那么抱歉,我对内核一点都不熟悉。

[ 本帖最后由 sep 于 2007-7-12 17:29 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2007-07-13 14:36 |只看该作者
在default_mtd_partitions里指定了offset,我的image就分别烧写在这些地址就行了,是这个意思吧。
不过我的理解是file system应该是由内核调用,而这里是通知bootloader?
还有一个问题是,这里default_mtd_partitions应该是利用了内核的MTD subsystem,相当于是对flash进行分区,而我的bootloader(yamon)似乎不支持MTD,可能这个方法不能套用?
谢谢。

论坛徽章:
0
8 [报告]
发表于 2007-07-14 16:51 |只看该作者
我新来的
继续学习中!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP