⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 params.c

📁 Intrisyc 公司的PXA255-bootloader,源码易懂
💻 C
字号:
//////////////////////////////////////////////////////////////////////////////////// Copyright(c) 2001 Intrinsyc Software Inc. All rights reserved.//// Module name:////      params.c//// Description:////      Interfaces with the Linux kernel command string functions.//// Author:////      Mike Kirkland//// Created:////      October 2001//////////////////////////////////////////////////////////////////////////////////#include <types.h>#include <params.h>#include <asm/setup.h>//these may not be in the above, depending on kernel version.#ifndef tag_next#define tag_next(t)   ((struct tag *)((u32 *)(t) + (t)->hdr.size))#endif#ifndef tag_size#define tag_size(type)  ((sizeof(struct tag_header) + sizeof(struct type)) >> 2)#endif// Convert physical address (MMU off) to virtual address as seen by Linux// kernel (MMU on)#define PHYS_TO_VIRT(a) ((a) + 0x20000000)//#define SET_ATAG_INITRD 1#define INITRD_MEMORY_BASE PHYS_TO_VIRT(0xa1000000)#define INITRD_MEMORY_SIZE 0x100000////////////////////////////////////////////////////////////////////////////////// kernel_param// PURPOSE: Sets up a Linux kernel command string in memory.// PARAMS:  (IN) char *commandline - kernel command string.// RETURNS: Address at which parameter list is stored.////////////////////////////////////////////////////////////////////////////////struct tag *kernel_param(char const *commandline){   struct tag *params = (struct tag *)BOOT_PARAMS;   int i;   params->hdr.size = tag_size(tag_core);   params->hdr.tag = ATAG_CORE;   params->u.core.flags = 0;   params->u.core.pagesize = 0;   params->u.core.rootdev = 0;   params = tag_next(params);   // Cerf kernels set up memory banks themselves and don't react well when   // we set up an ATAG_MEM as well.#ifdef SET_ATAG_MEM   params->hdr.size = tag_size(tag_mem32);   params->hdr.tag = ATAG_MEM;   params->u.mem.size = PLATFORM_MEMORY_SIZE;   params->u.mem.start = PLATFORM_MEMORY_BASE;   params = tag_next(params);#endif //SET_ATAG_MEM#ifdef SET_ATAG_INITRD   params->hdr.size = tag_size(tag_initrd);   params->hdr.tag = ATAG_INITRD;   params->u.initrd.start = INITRD_MEMORY_BASE; // MMU-mapped address   params->u.initrd.size = INITRD_MEMORY_SIZE;   params = tag_next(params);#endif //SET_ATAG_INITRD   if (commandline && *commandline)   {       params->hdr.tag = ATAG_CMDLINE;       for (i=0; commandline[i] != 0; ++i)          params->u.cmdline.cmdline[i] = commandline[i];       params->u.cmdline.cmdline[i] = 0;       params->hdr.size = tag_size(tag_cmdline) + ((i+3) / 4);       params = tag_next(params);   }   // List is terminated by a zero length tag   params->hdr.size = 0;   params->hdr.tag = ATAG_NONE;   return (struct tag *)BOOT_PARAMS;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -