| Function report | 
| Source Code: arch\x86\kernel\kexec-bzimage64.c | Create Date:2022-07-28 08:37:47 | 
| Last Modify:2020-03-12 14:18:49 | Copyright©Brick | 
| home page | Tree | 
| Annotation kernel can get tool activity | Download SCCT | Chinese | 
Name:bzImage64_load
Proto:static void *bzImage64_load(struct kimage *image, char *kernel, unsigned long kernel_len, char *initrd, unsigned long initrd_len, char *cmdline, unsigned long cmdline_len)
Type:void
Parameter:
| Type | Parameter | Name | 
|---|---|---|
| struct kimage * | image | |
| char * | kernel | |
| unsigned long | kernel_len | |
| char * | initrd | |
| unsigned long | initrd_len | |
| char * | cmdline | |
| unsigned long | cmdline_len | 
| 342 | ret = 0 | 
| 349 | setup_hdr_offset = offsetof(structboot_params, hdr) | 
| 356 | header = kernel + setup_hdr_offset | 
| 357 | setup_sects = setup_sects | 
| 358 | If setup_sects == 0 Then setup_sects = 4 | 
| 361 | kern16_size = (setup_sects + 1) * 512 | 
| 362 | If kernel_len < kern16_size Then | 
| 367 | If cmdline_len > cmdline_size Then | 
| 376 | If cmdline_len + lfcorehdr=0x<64bit-value> > cmdline_size Then | 
| 377 | pr_debug("Appending elfcorehdr=<addr> to command line exceeds maximum allowed length\n") | 
| 382 | If Flags to indicate special processing == KEXEC_TYPE_CRASH Then | 
| 392 | ret = kexec_load_purgatory(image, & pbuf) | 
| 393 | If ret Then | 
| 409 | efi_map_sz = efi_get_runtime_map_size() | 
| 410 | params_cmdline_sz = size of boot_params + cmdline_len + lfcorehdr=0x<64bit-value> | 
| 413 | bufsz = params_cmdline_sz + @a is a power of 2 value (efi_map_sz, 16) + sizeof(structsetup_data) + sizeof(structefi_setup_data) | 
| 417 | params = kzalloc - allocate memory. The memory is set to zero.*@size: how many bytes of memory are required.*@flags: the type of memory to allocate (see kmalloc). | 
| 424 | setup_header_size = 0x0202 + kernel[0x0201] - setup_hdr_offset | 
| 427 | memcpy( & setup header , (kernel + setup_hdr_offset), setup_header_size) | 
| 431 | buf_align = 16 | 
| 432 | buf_min = MIN_BOOTPARAM_ADDR | 
| 433 | ret = kexec_add_buffer( & kbuf) | 
| 434 | If ret Then Go to out_free_params | 
| 436 | bootparam_load_addr = mem | 
| 437 | pr_debug("Loaded boot_param, command line and misc at 0x%lx bufsz=0x%lx memsz=0x%lx\n", bootparam_load_addr, bufsz, bufsz) | 
| 441 | buffer = kernel + kern16_size | 
| 442 | bufsz = kernel_len - kern16_size | 
| 444 | buf_align = kernel_alignment | 
| 445 | buf_min = MIN_KERNEL_LOAD_ADDR | 
| 446 | mem = If kexec_buf.mem is set to this value, kexec_locate_mem_hole()* will try to allocate free memory. Arch may overwrite it. | 
| 447 | ret = kexec_add_buffer( & kbuf) | 
| 448 | If ret Then Go to out_free_params | 
| 450 | kernel_load_addr = mem | 
| 452 | pr_debug("Loaded 64bit kernel at 0x%lx bufsz=0x%lx memsz=0x%lx\n", kernel_load_addr, bufsz, memsz) | 
| 456 | If initrd Then | 
| 458 | bufsz = memsz = initrd_len | 
| 460 | buf_min = MIN_INITRD_LOAD_ADDR | 
| 461 | mem = If kexec_buf.mem is set to this value, kexec_locate_mem_hole()* will try to allocate free memory. Arch may overwrite it. | 
| 462 | ret = kexec_add_buffer( & kbuf) | 
| 463 | If ret Then Go to out_free_params | 
| 465 | initrd_load_addr = mem | 
| 467 | pr_debug("Loaded initrd at 0x%lx bufsz=0x%lx memsz=0x%lx\n", initrd_load_addr, initrd_len, initrd_len) | 
| 473 | setup_cmdline(image, params, bootparam_load_addr, size of boot_params , cmdline, cmdline_len) | 
| 477 | type_of_loader = 0x0D << 4 | 
| 478 | loadflags = 0 | 
| 481 | ret = kexec_purgatory_get_set_symbol(image, "entry64_regs", & regs64, size of regs64 , 1) | 
| 483 | If ret Then Go to out_free_params | 
| 486 | rbx = 0 | 
| 487 | rsi = bootparam_load_addr | 
| 488 | rip = kernel_load_addr + 0x200 | 
| 489 | stack = kexec_purgatory_get_symbol_addr(image, "stack_end") | 
| 491 | pr_err("Could not find address of symbol stack_end\n") | 
| 493 | Go to out_free_params | 
| 497 | ret = kexec_purgatory_get_set_symbol(image, "entry64_regs", & regs64, size of regs64 , 0) | 
| 499 | If ret Then Go to out_free_params | 
| 502 | ret = setup_boot_parameters(image, params, bootparam_load_addr, efi_map_offset, efi_map_sz, efi_setup_data_offset) | 
| 505 | If ret Then Go to out_free_params | 
| 509 | ldata = kzalloc - allocate memory. The memory is set to zero.*@size: how many bytes of memory are required.*@flags: the type of memory to allocate (see kmalloc). | 
| 510 | If Not ldata Then | 
| 512 | Go to out_free_params | 
| 520 | Temporary buffer to hold bootparams buffer. This should be* freed once the bootparam segment has been loaded. = params | 
| 521 | Return ldata | 
| 523 | out_free_params : | 
| Source code conversion tool public plug-in interface | X | 
|---|---|
| Support c/c++/esqlc/java Oracle/Informix/Mysql Plug-in can realize: logical Report Code generation and batch code conversion |