嵌入式linux如何读文件系统

发布于 2022-09-29 17:25:20 字数 133 浏览 12 评论 0

比方说我现在有kernel和文件系统image都放在flash,
kernel boot起来之后,怎么通知它文件系统在哪儿呢?
PC上直接在grub里制定root=/dev/hdaX就行了
嵌入式系统怎么制定呢?
谢谢

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

后来的我们 2022-10-06 17:25:20

其起始地址是在boot loader中的一个文件设置的。比方说你用的是s3c2410,而bootloader是vivi,那么是在vivi\arch\s3c2410\smdk.c设定的。所以要将image烧写在其固定的起始地址。

情栀口红 2022-10-06 17:25:20

这样不是恨不灵活?
kernel在flash里的地址也要这样写,然后重新编译bootlaoder,而且不一定所有bootloader都支持把?
能不能像硬盘那样直接分区,然后通过bootloader告诉kernel从哪个分区启动?

夏雨凉 2022-10-06 17:25:20

没有像硬盘那样的直接分区。
其实我觉得pc的分区本质上和嵌入式系统的手动分配地址是一样的。只不过分区更方便一点。

十六岁半 2022-10-06 17:25:20

你所谓的“手动分配地址”是指在load kernel或是root filesys的时候指定地址?
我想应该不用在编译时定下来吧

迷迭香的记忆 2022-10-06 17:25:20
  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 编辑 ]

表情可笑 2022-10-06 17:25:20

在default_mtd_partitions里指定了offset,我的image就分别烧写在这些地址就行了,是这个意思吧。
不过我的理解是file system应该是由内核调用,而这里是通知bootloader?
还有一个问题是,这里default_mtd_partitions应该是利用了内核的MTD subsystem,相当于是对flash进行分区,而我的bootloader(yamon)似乎不支持MTD,可能这个方法不能套用?
谢谢。

心的憧憬 2022-10-06 17:25:20

我新来的
继续学习中!!!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文