Article Title: Use the initrd File System U-boot to guide Linux. Linux is a technology channel of the IT lab in China. Includes basic categories such as desktop applications, Linux system management, kernel research, embedded systems, and open source.
Bootm 0x100000 0x240000
(0x100000 indicates the address of the Linux kernel in flash, and 0x240000 indicates the address of initrd in flash)
Setenv bootargs console = ttyS0, 115200n8 root =/dev/ram rw mem = 32 M
When u-boot uses the above settings, it can boot linux to load initrd normally!
Note:
Between u-boot and Linux kernel, startup parameters are passed through ATAG-TAG. U-boot:
Bootm 0x100000 0x240000
Call setup_initrd_tag () to create an initd tag table item at the corresponding location of params = (struct TAG *) bd-> bi_boot_params memory, and pass Kernel Parameters About initrd to linux. Therefore, you do not need to specify the relevant initrd parameters in bootargs!
void do_bootm_linux (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[],ulong addr, ulong *len_ptr, int verify){ulong initrd_start, initrd_end;......data = addr + sizeof (image_header_t);len = ntohl (hdr->ih_size);...... #if defined(CONFIG_B2) || defined(CONFIG_OSK_OMAP5912)memmove ((void *) ntohl(hdr->ih_load), (uchar *)data, len);data = ntohl(hdr->ih_load);#endif ...... if (data) {initrd_start = data;initrd_end = initrd_start + len;}......#if defined (CONFIG_SETUP_MEMORY_TAGS) || \defined (CONFIG_CMDLINE_TAG) || \defined (CONFIG_INITRD_TAG) || \setup_start_tag (bd);......#ifdef CONFIG_INITRD_TAGif (initrd_start && initrd_end)setup_initrd_tag (bd, initrd_start, initrd_end);#endif......setup_end_tag (bd);#endif......theKernel (0, bd->bi_arch_number, bd->bi_boot_params);}#ifdef CONFIG_INITRD_TAGstatic void setup_initrd_tag (bd_t *bd, ulong initrd_start, ulong initrd_end){params->hdr.tag = ATAG_INITRD2;params->hdr.size = tag_size (tag_initrd);params->u.initrd.start = initrd_start;params->u.initrd.size = initrd_end - initrd_start; params = tag_next (params);}#endif#if defined (CONFIG_SETUP_MEMORY_TAGS) || \defined (CONFIG_CMDLINE_TAG) || \defined (CONFIG_INITRD_TAG) || \......static void setup_start_tag (bd_t *bd){params = (struct tag *) bd->bi_boot_params;......params = tag_next (params);}int board_init (void){DECLARE_GLOBAL_DATA_PTR;gd->bd->bi_arch_number = 234;gd->bd->bi_boot_params = 0x10000100;......}
|