亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? linux.c

?? grub 1.95 linux 的bootloader 源代碼
?? C
字號(hào):
/* linux.c - boot Linux *//* *  GRUB  --  GRand Unified Bootloader *  Copyright (C) 2003, 2004, 2005  Free Software Foundation, Inc. * *  This program is free software; you can redistribute it and/or modify *  it under the terms of the GNU General Public License as published by *  the Free Software Foundation; either version 2 of the License, or *  (at your option) any later version. * *  This program is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *  GNU General Public License for more details. * *  You should have received a copy of the GNU General Public License *  along with this program; if not, write to the Free Software *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */#include <grub/elf.h>#include <grub/loader.h>#include <grub/dl.h>#include <grub/mm.h>#include <grub/rescue.h>#include <grub/misc.h>#include <grub/ieee1275/ieee1275.h>#include <grub/machine/loader.h>static grub_dl_t my_mod;static int loaded;static int vmlinux;static grub_addr_t initrd_addr;static grub_size_t initrd_size;static grub_addr_t linux_addr;static grub_size_t linux_size;static char *linux_args;typedef void (*kernel_entry_t) (void *, unsigned long, int (void *),				unsigned long, unsigned long);static grub_err_tgrub_linux_boot (void){  kernel_entry_t linuxmain;  grub_ssize_t actual;  /* Set the command line arguments.  */  grub_ieee1275_set_property (grub_ieee1275_chosen, "bootargs", linux_args,			      grub_strlen (linux_args) + 1, &actual);  grub_dprintf ("loader", "Entry point: 0x%x\n", linux_addr);  grub_dprintf ("loader", "Initrd at: 0x%x, size 0x%x\n", initrd_addr,		initrd_size);  grub_dprintf ("loader", "Boot arguments: %s\n", linux_args);  grub_dprintf ("loader", "Jumping to Linux...\n");  /* Boot the kernel.  */  linuxmain = (kernel_entry_t) linux_addr;  linuxmain ((void *) initrd_addr, initrd_size, grub_ieee1275_entry_fn, 0, 0);  return GRUB_ERR_NONE;}static grub_err_tgrub_linux_release_mem (void){  grub_free (linux_args);  linux_args = 0;  if (linux_addr && grub_ieee1275_release (linux_addr, linux_size))    return grub_error (GRUB_ERR_OUT_OF_MEMORY, "Can not release memory");  if (initrd_addr && grub_ieee1275_release (initrd_addr, initrd_size))    return grub_error (GRUB_ERR_OUT_OF_MEMORY, "Can not release memory");  linux_addr = 0;  initrd_addr = 0;  return GRUB_ERR_NONE;}static grub_err_tgrub_linux_unload (void){  grub_err_t err;  err = grub_linux_release_mem ();  grub_dl_unref (my_mod);  loaded = 0;  return err;}voidgrub_rescue_cmd_linux (int argc, char *argv[]){  grub_file_t file = 0;  Elf32_Ehdr ehdr;  Elf32_Phdr *phdrs = 0;  int i;  int offset = 0;  grub_addr_t entry;  int found_addr = 0;  int size;  char *dest;  grub_dl_ref (my_mod);  if (argc == 0)    {      grub_error (GRUB_ERR_BAD_ARGUMENT, "no kernel specified");      goto fail;    }  file = grub_file_open (argv[0]);  if (! file)    goto fail;  if (grub_file_read (file, (char *) &ehdr, sizeof (ehdr)) != sizeof (ehdr))    {      grub_error (GRUB_ERR_READ_ERROR, "cannot read the linux elf header");      goto fail;    }  if (grub_dl_check_header (&ehdr, sizeof(ehdr)))    {      grub_error (GRUB_ERR_UNKNOWN_OS, "No valid ELF header found");      goto fail;    }  if (ehdr.e_type != ET_EXEC)    {      grub_error (GRUB_ERR_UNKNOWN_OS,		  "This ELF file is not of the right type\n");      goto fail;    }  /* Read the sections.  */  entry = ehdr.e_entry;  if (entry == 0xc0000000)    {      entry = 0x01400000;      vmlinux = 1;    }  else    vmlinux = 0;  phdrs = (Elf32_Phdr *) grub_malloc (ehdr.e_phnum * ehdr.e_phentsize);  grub_file_read (file, (void *) phdrs, ehdr.e_phnum * ehdr.e_phentsize);  /* Release the previously used memory.  */  grub_loader_unset ();  /* Determine the amount of memory that is required.  */  linux_size = 0;  for (i = 0; i < ehdr.e_phnum; i++)    {      Elf32_Phdr *phdr = phdrs + i;      /* XXX: Is this calculation correct?  */      linux_size += phdr->p_memsz + phdr->p_filesz;    }  /* Reserve memory for the kernel.  */  linux_size += 0x100000;  /* For some vmlinux kernels the address set above won't work.  Just     try some other addresses just like yaboot does.  */  for (linux_addr = entry; linux_addr < entry + 200 * 0x100000; linux_addr += 0x100000)    {      grub_dprintf ("loader", "Attempting to claim at 0x%x, size 0x%x.\n", 		    linux_addr, linux_size);      found_addr = grub_claimmap (linux_addr, linux_size);      if (found_addr != -1)	break;    }  if (found_addr == -1)    {      grub_error (GRUB_ERR_OUT_OF_MEMORY, "Can not claim memory");      goto fail;    }  entry = linux_addr;  /* Load every loadable segment in memory.  */  for (i = 0; i < ehdr.e_phnum; i++)    {      Elf32_Phdr *phdr = phdrs + i;      if (phdr->p_type == PT_LOAD)	{	  void *segment_addr = ((char *) entry) + offset;	  if (grub_file_seek (file, phdr->p_offset) == (grub_off_t) -1)	    {	      grub_error (GRUB_ERR_BAD_OS, "Invalid offset in program header");	      goto fail;	    }	  grub_dprintf ("loader", "Loading segment %d at %p, size 0x%x\n", i,			segment_addr, phdr->p_filesz);	  if (grub_file_read (file, segment_addr, phdr->p_filesz)	      != (grub_ssize_t) phdr->p_filesz)	    goto fail;	  if (phdr->p_filesz < phdr->p_memsz)	    grub_memset ((char *) (((char *) entry) + offset) + phdr->p_filesz, 0,			 phdr->p_memsz - phdr->p_filesz);	  offset += phdr->p_filesz;	}    }  size = sizeof ("BOOT_IMAGE=") + grub_strlen (argv[0]);  for (i = 0; i < argc; i++)    size += grub_strlen (argv[i]) + 1;  linux_args = grub_malloc (size);  if (! linux_args)    goto fail;  /* Specify the boot file.  */  dest = grub_stpcpy (linux_args, "BOOT_IMAGE=");  dest = grub_stpcpy (dest, argv[0]);    for (i = 1; i < argc; i++)    {      *dest++ = ' ';      dest = grub_stpcpy (dest, argv[i]);    } fail:  if (file)    grub_file_close (file);  grub_free (phdrs);  if (grub_errno != GRUB_ERR_NONE)    {      grub_linux_release_mem ();      grub_dl_unref (my_mod);      loaded = 0;    }  else    {      grub_loader_set (grub_linux_boot, grub_linux_unload, 1);      initrd_addr = 0;      loaded = 1;    }  return;}voidgrub_rescue_cmd_initrd (int argc, char *argv[]){  grub_file_t file = 0;  grub_ssize_t size;  grub_addr_t first_addr;  grub_addr_t addr;  int found_addr = 0;  if (argc == 0)    {      grub_error (GRUB_ERR_BAD_ARGUMENT, "no initrd specified");      goto fail;    }  if (!loaded)    {      grub_error (GRUB_ERR_BAD_ARGUMENT, "You need to load the kernel first.");      goto fail;    }  file = grub_file_open (argv[0]);  if (! file)    goto fail;  first_addr = linux_addr + linux_size;  size = grub_file_size (file);  /* Attempt to claim at a series of addresses until successful in     the same way that grub_rescue_cmd_linux does.  */  for (addr = first_addr; addr < first_addr + 200 * 0x100000; addr += 0x100000)     {      grub_dprintf ("loader", "Attempting to claim at 0x%x, size 0x%x.\n", 		    addr, size);      found_addr = grub_claimmap (addr, size);      if (found_addr != -1)	break;    }  if (found_addr == -1)    {      grub_error (GRUB_ERR_OUT_OF_MEMORY, "Can not claim memory");      goto fail;    }  grub_dprintf ("loader", "Loading initrd at 0x%x, size 0x%x\n", addr, size);  if (grub_file_read (file, (void *) addr, size) != size)    {      grub_ieee1275_release (addr, size);      grub_error (GRUB_ERR_FILE_READ_ERROR, "Couldn't read file");      goto fail;    }  initrd_addr = addr;  initrd_size = size; fail:  if (file)    grub_file_close (file);}GRUB_MOD_INIT(linux){  grub_rescue_register_command ("linux", grub_rescue_cmd_linux,				"load a linux kernel");  grub_rescue_register_command ("initrd", grub_rescue_cmd_initrd,				"load an initrd");  my_mod = mod;}GRUB_MOD_FINI(linux){  grub_rescue_unregister_command ("linux");  grub_rescue_unregister_command ("initrd");}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本道免费精品一区二区三区| 一本色道a无线码一区v| 亚洲欧美偷拍卡通变态| 日韩欧美一区二区在线视频| 99r精品视频| 九色|91porny| 天天综合网天天综合色| 国产精品乱码久久久久久| 日韩欧美国产午夜精品| 欧美视频一区二区在线观看| 成人免费黄色大片| 久久机这里只有精品| 午夜亚洲福利老司机| 亚洲欧美电影一区二区| 国产精品视频一二三区| 久久久国产一区二区三区四区小说| 4hu四虎永久在线影院成人| 色8久久人人97超碰香蕉987| 丁香六月久久综合狠狠色| 蜜桃视频免费观看一区| 性久久久久久久| 亚洲国产日韩av| 一区二区三区在线不卡| 亚洲天天做日日做天天谢日日欢| 国产丝袜欧美中文另类| 精品美女一区二区三区| 制服丝袜中文字幕亚洲| 777久久久精品| 欧美精品少妇一区二区三区| 欧洲精品视频在线观看| 97se亚洲国产综合在线| 91免费视频大全| av资源网一区| 97aⅴ精品视频一二三区| 91性感美女视频| 色综合色狠狠天天综合色| 成人激情午夜影院| 成av人片一区二区| 成人av动漫在线| 色综合天天综合网天天看片| av欧美精品.com| 99精品欧美一区| 91香蕉视频在线| 色婷婷综合中文久久一本| 99re这里只有精品首页| 色先锋aa成人| 欧美剧情片在线观看| 欧美日韩国产精选| 日韩精品一区二区三区视频播放| 日韩欧美视频一区| 国产亚洲午夜高清国产拍精品 | 欧美视频在线观看一区| 欧美亚洲精品一区| 欧美一区二区三区视频免费 | 欧日韩精品视频| 欧美日韩国产精品自在自线| 91精品一区二区三区久久久久久| 日韩欧美高清dvd碟片| 久久久久久久综合色一本| 国产精品无圣光一区二区| 亚洲精品成人a在线观看| 亚洲va韩国va欧美va| 免费成人你懂的| 成人亚洲一区二区一| 色av成人天堂桃色av| 日韩一区二区在线看| 国产欧美久久久精品影院| 亚洲激情校园春色| 免费的国产精品| 成人h动漫精品一区二区| 欧美综合视频在线观看| 日韩免费视频一区| 亚洲欧洲一区二区在线播放| 午夜成人在线视频| 国产成人啪免费观看软件| 在线看国产日韩| 久久理论电影网| 一区二区三区四区亚洲| 久久99国产乱子伦精品免费| 91原创在线视频| 日韩免费视频一区二区| 亚洲伦理在线免费看| 久久精品久久久精品美女| 99re亚洲国产精品| 精品国产乱码久久久久久免费 | 精品国产电影一区二区| 亚洲特级片在线| 精品一区二区在线视频| 欧美中文字幕亚洲一区二区va在线| 日韩视频一区二区三区| 亚洲欧洲精品一区二区三区不卡| 蜜臀av一区二区| 在线一区二区三区四区五区 | 成人黄页在线观看| 日韩片之四级片| 亚洲日本韩国一区| 激情综合色综合久久| 欧美视频在线观看一区| 国产精品护士白丝一区av| 麻豆91在线播放免费| 欧美手机在线视频| 国产精品成人免费| 国产在线播放一区二区三区| 欧美肥妇free| 亚洲日穴在线视频| 国产高清亚洲一区| 日韩精品资源二区在线| 亚洲va欧美va人人爽| 色综合色综合色综合| 日本一区二区成人在线| 国内精品在线播放| 欧美一区二区三区思思人| 亚洲午夜精品网| 91久久精品国产91性色tv | 亚洲一区在线观看网站| 成人黄色国产精品网站大全在线免费观看| 欧美一级久久久| 亚洲国产乱码最新视频| 欧美亚洲一区二区三区四区| 亚洲人成网站在线| 91美女视频网站| 国产精品久久看| 成人午夜av电影| 中文字幕精品—区二区四季| 国产高清在线观看免费不卡| 精品国产一区二区国模嫣然| 看国产成人h片视频| 日韩视频一区二区三区 | 国产一区二区三区精品视频| 欧美v日韩v国产v| 麻豆精品国产传媒mv男同| 欧美一级国产精品| 麻豆视频观看网址久久| 日韩精品一区二区三区视频| 久久99精品网久久| 久久一日本道色综合| 国产一区二区三区在线看麻豆| 欧美变态tickle挠乳网站| 精品一区二区三区在线播放| 日韩欧美国产精品| 国产乱一区二区| 久久久久久久久久美女| 国产酒店精品激情| 亚洲国产精品二十页| 99国内精品久久| 亚洲精品视频在线看| 欧美三级蜜桃2在线观看| 婷婷丁香久久五月婷婷| 国产欧美一区视频| av高清久久久| 亚洲一区二区三区精品在线| 欧美裸体bbwbbwbbw| 蜜桃久久久久久久| 国产亚洲欧美日韩俺去了| 不卡的看片网站| 一级特黄大欧美久久久| 欧美一级专区免费大片| 国产一区在线看| 自拍偷在线精品自拍偷无码专区| 欧美一a一片一级一片| 日本视频中文字幕一区二区三区| 精品国产区一区| 本田岬高潮一区二区三区| 午夜影院久久久| 久久精品免视看| 色八戒一区二区三区| 麻豆国产精品777777在线| 国产精品网站导航| 欧美午夜精品一区| 国产一区二区三区蝌蚪| 亚洲精品老司机| 26uuu久久综合| 色综合久久精品| 国产真实乱偷精品视频免| 自拍av一区二区三区| 日韩视频一区二区在线观看| jizz一区二区| 久久精品久久综合| 亚洲欧美日韩电影| 精品国一区二区三区| 91啪亚洲精品| 精品中文字幕一区二区小辣椒| 最新日韩av在线| 欧美成人猛片aaaaaaa| 91国偷自产一区二区使用方法| 精品一区二区三区影院在线午夜| 亚洲精品五月天| 久久精品一区二区三区不卡| 欧美日韩久久久| av激情综合网| 国产一区999| 五月婷婷激情综合| 日韩毛片一二三区| 久久这里只有精品视频网| 欧美日韩精品综合在线| 成人av在线播放网站| 国产一区二区三区四区五区美女| 亚洲成a人v欧美综合天堂下载| 国产精品美女视频| 久久亚洲一区二区三区四区|