博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
grub学习(3) 加载initrd
阅读量:4068 次
发布时间:2019-05-25

本文共 1204 字,大约阅读时间需要 4 分钟。

 

grub_err_tgrub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)),		 int argc, char *argv[]){	struct linux_kernel_header *lh;		/* 打开initrd并计算其需要的页面 */	file = grub_file_open (argv[0]);	size = grub_file_size (file);	initrd_pages = (page_align (size) >> 12);		/* 计算initrd加载地址 */	lh = (struct linux_kernel_header *) real_mode_mem;	/* Get the highest address available for the initrd.  */	if (grub_le_to_cpu16 (lh->version) >= 0x0203)    {      addr_max = grub_cpu_to_le32 (lh->initrd_addr_max);    }	addr_max -= 0x10000;	/* Usually, the compression ratio is about 50%.  */	addr_min = (grub_addr_t) prot_mode_target + ((prot_mode_pages * 3) << 12)				+ page_align (size);	/* Put the initrd as high as possible, 4KiB aligned.  */	addr = (addr_max - size) & ~0xFFF;		/* 分配空间 */	grub_relocator_chunk_t ch;    err = grub_relocator_alloc_chunk_align (relocator, &ch,					    addr_min, addr, size, 0x1000,					    GRUB_RELOCATOR_PREFERENCE_HIGH);    initrd_mem = get_virtual_current_address (ch);    initrd_mem_target = get_physical_target_address (ch);		/* 读取initrd到缓存 */	grub_file_read (file, initrd_mem, size) != size		lh->ramdisk_image = initrd_mem_target;	lh->ramdisk_size = size;	lh->root_dev = 0x0100; }

 

转载地址:http://lflji.baihongyu.com/

你可能感兴趣的文章
Spring4的IoC和DI的区别
查看>>
springcloud 的eureka服务注册demo
查看>>
eureka-client.properties文件配置
查看>>
MODULE_DEVICE_TABLE的理解
查看>>
platform_device与platform_driver
查看>>
platform_driver平台驱动注册和注销过程(下)
查看>>
.net强制退出主窗口的方法——Application.Exit()方法和Environment.Exit(0)方法
查看>>
c# 如何调用win8自带的屏幕键盘(非osk.exe)
查看>>
build/envsetup.sh 简介
查看>>
C++后继有人——D语言
查看>>
Android framework中修改或者添加资源无变化或编译不通过问题详解
查看>>
linux怎么切换到root里面?
查看>>
linux串口操作及设置详解
查看>>
安装alien,DEB与RPM互换
查看>>
linux系统下怎么安装.deb文件?
查看>>
编译Android4.0源码时常见错误及解决办法
查看>>
Android 源码编译make的错误处理
查看>>
linux环境下C语言中sleep的问题
查看>>
ubuntu 12.04 安装 GMA3650驱动
查看>>
新版本的linux如何生成xorg.conf
查看>>