转存 --- loader

用sqlloader:  
  1、打开MicroSoft   Excel   2000  
   
  2、文件(F)→新建(N)→工作簿→  
   
  3、输入以下数据,存盘为test.xls,如图:  
   
         
   
  4、文件(F)→另存为(A)→  
   
        保存类型为:制表符分隔,起名为text.txt,保存到C:\  
   
         
   
  5、连入SQL*Plus  
        以system/manager用户登录,  
        SQL>   conn   system/manager  
   
        创建表结构  
        SQL>   create   table   test  
      (  
      id       number,        --序号  
      username    varchar2(10),     --用户名  
      password    varchar2(10),     --密码  
      sj       varchar2(20)        --建立日期  
      );  
   
  6、创建SQL*Loader输入数据所需要的文件,均保存到C:\,用记事本编辑:  
        控制文件:input.ctl,内容如下:  
   
    load   data             --1、控制文件标识  
    infile   'test.txt'         --2、要输入的数据文件名为test.txt  
    append   into   table   test    --3、向表test中追加记录  
    fields   terminated   by   X'09'  --4、字段终止于X'09',是一个制表符(TAB)  
    (id,username,password,sj)     -----定义列对应顺序  
   
  a、insert,为缺省方式,在数据装载开始时要求表为空  
  b、append,在表中追加新记录  
  c、replace,删除旧记录,替换成新装载的记录  
  d、truncate,同上  
   
  7、在DOS窗口下使用SQL*Loader命令实现数据的输入  
   
  C:\>sqlldr   userid=system/manager   control=input.ctl  
   
         
   
    默认日志文件名为:input.log  
    默认坏记录文件为:input.bad  
   
  8、连接到SQL*Plus中,查看是否成功输入  

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/13750068/viewspace-515977/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/13750068/viewspace-515977/

<think> 嗯,用户这次的问题是关于Boot Loader的工作流程,特别是确认"先初始化硬件再加载内核"的描述是否正确。这个问题涉及到计算机启动过程的底层机制,需要结合之前提供的引用内容来回答。 用户可能正在学习操作系统或嵌入式系统开发,因为ta关注的是Boot Loader这种底层组件的原理。从ta引用这么多专业资料来看,用户应该有一定技术基础,但需要更清晰的流程解释。 我注意到引用[1]和[2]明确指出Boot Loader的两大核心任务:初始化硬件和建立内存映射(准备工作环境),然后加载并跳转到内核。引用[4]还展示了汇编级别的实现细节,比如设置堆栈指针这种硬件相关操作。这些正好能验证用户询问的流程。 需要特别说明的是,硬件初始化是分阶段的:Boot Loader只处理"关键硬件"(如CPU模式切换、内存控制器、基础输入输出),其他复杂设备(如显卡、网卡)留给内核驱动。引用[3]提到的两种模式也佐证了这点——即使在下载模式,也要先确保基础硬件可用才能传输文件。 用户可能没意识到的是,Boot Loader的硬件初始化动作其实是在继承BIOS/UEFI的工作(引用[2])。在x86架构中,BIOS已经做过一轮检测,而嵌入式系统里Boot Loader就得自己从头做起(引用[2]提到ARM从0x00000000启动的例子)。 最后考虑补充内存管理的细节,引用[5]说的转存地址0x7E00就是经典案例——Boot Loader必须先把内核放到1MB以下地址,等开启保护模式后再搬运到高位地址。这正好说明为什么初始化内存控制器要排在加载内核之前。 </think> 是的,**Boot Loader 必须先初始化关键硬件,再加载操作系统内核**。这是计算机系统启动的核心流程,其原理和必要性如下: ### 工作原理与流程 ```mermaid graph LR A[上电/复位] --> B[BIOS/UEFI] --> C[加载Boot Loader] C --> D{硬件初始化} D --> E[关键硬件初始化] E --> F[内存控制器<br>CPU工作模式<br>时钟系统<br>基础输入输出] F --> G[加载操作系统内核] G --> H[移交控制权给内核] ``` ### 关键步骤详解 1. **硬件初始化阶段** Boot Loader 首先初始化确保系统基本运行的核心硬件: - **内存控制器**:建立物理内存映射,为后续操作提供内存空间[^4] - **CPU工作模式**:如 ARM 从复位向量切换至 SVC 模式,x86 进入保护模式[^4] - **时钟系统**:配置 CPU/总线时钟频率 - **基础 I/O**:初始化串口、Flash 控制器等通信接口[^3] > *示例代码(ARM 汇编):* > ```armasm > Boot_Loader: > LDR SP, =0x2000 ; 设置堆栈指针[^4] > BL init_clock ; 初始化时钟 > BL init_memory_ctrl ; 配置内存控制器 > ``` 2. **加载内核阶段** 在硬件可用后执行: - **定位内核映像**:从存储介质(硬盘/SD卡/Flash)查找内核文件 - **搬运至内存**:如将内核从 BIOS 限制区(如 `0x7E00`)移至高位内存[^5] - **解压与校验**:处理压缩内核并验证完整性 > *FAT12 文件系统加载示例:* > ```c > // 从磁盘读取内核到转存区 0x7E00 > LoadFile(BaseTmpOfKernelAddr, OffsetTmpOfKernelFile); [^5] > ``` 3. **控制权移交** 最终跳转到内核入口点: ```armasm LDR PC, =0x8000 ; 跳转到内核加载地址 ``` ### 必要性分析 | 步骤 | 必要性说明 | |--------------|----------------------------------------------------------------------------| | **先初始化硬件** | 未初始化的硬件会导致:<br>- 内存访问错误(无法加载内核)<br>- CPU 模式错误(无法执行保护指令)<br>- 外设失效(无法读取存储介质)[^1][^4] | | **后加载内核** | 内核依赖已初始化的硬件环境:<br>- 内存映射完成才能正确寻址<br>- 存储控制器就绪才能加载数据<br>- 时钟稳定保证执行时序[^2] | ### 典型证据 1. **嵌入式场景**: ARM 复位后直接从 `0x00000000` 执行 Boot Loader,**必须**由它初始化内存控制器,否则后续指令无法运行[^2] 2. **x86 场景**: BIOS 加载 Boot Loader 后,后者**必须**将 CPU 切换到保护模式并设置 GDT,否则无法访问 1MB 以上内存(内核加载区域)[^5] 3. **U-Boot 流程**: 主流 Boot Loader 的 `board_init_f()` 函数首先初始化 DDR/时钟,再通过 `relocate_code()` 搬运自身到内存高位,最后加载内核[^3] > ⚙️ **技术本质**: > Boot Loader 构建了从**裸机硬件**到**操作系统运行环境**的桥梁: > $$ \text{物理硬件} \xrightarrow{\text{初始化}} \text{稳定执行环境} \xrightarrow{\text{内核加载}} \text{操作系统} $$ ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值