How to Use the initrd File System U-boot to boot Linux

Source: Internet
Author: User
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;......}
        

 

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.