ARM Cortex-A8/A9开发板 | ARM11开发板ARM11开发套件 | ARM9开发板ARM9开发套件 | 飞思卡尔I.MX28I.MX6开发板 |
tiny210/mini210开发板 | mini6410开发板/套餐 | Tiny6410开发板无线套件 | mini2440开发板/套餐 | micro2440开发板带核心板 | 友善开发板配件 模块 | QQ2440 V3 SBC-2410X |
FL2440 OK2440-IV V4 | OK2440-III OK2440V3 | TE2440-II TE2440V2 | OK6410 S3C6410 ARM11 | FL6410/OK6410B ARM11 | TE6410 S3C6410 ARM11 | TE-9263 AT91SAM9263 | 开发板配件 模块和其他 |
Xilinx开发板/fpga开发套件 | altera开发板/fpga开发套件 | 基于FMC FPGA/DSP子卡 |
BeagleBoard原厂开发板 | PandaBoard原厂开发板 |
TI DM3730 DevKit8500D | TI系列 omap3530开发板 | ATMEL系列 开发板 | Samsung系列 开发板 | 开发板配件-仿真器 模块 | NXP LPC3250 mini3250 |
Tiny210 三星S5PV210 | Mini210/Mini210s开发板 | Tiny4412开发板Cortex-A9 | Tiny6410开发板 ARM11 | mini2440开发板 ARM9 | micro2440开发板 ARM9 | mini6410开发板 ARM11 | 友善ARM开发板配件 模块 |
keil ARM仿真器/开发工具 | STM32开发板 Cortex-M3 | NXP LPC开发板Cortex-M3 | ATMEL系列 ARM开发板 | Luminary EKK8962开发板 | Freescale i.MX31开发板 | 三星s3c2440 s3c6410开发板 |
FL2440 OK2440-IV V4 | OK6410 S3C6410 ARM11 | FL6410/OK6410B ARM11 | OK210/-A Cortex-A8 | TE2440-II TE2440V2 | TE6410 S3C6410 ARM11 | TE-9263 AT91SAM9263 | ARM开发板配件 模块等 |
Real6410开发板/套餐 | Real210开发板/Real2410 | WIFI GPS GPRS模块摄像头 |
Xilinx开发板/开发套件KIT | Altera开发板/开发套件KIT | 配套模块 |
NXP LPC开发板 ARM7 | Cortex-M3 STM32开发板 | 最小系统模块类(初学者勿选) | 开发工具 仿真器 调试器 | TFT液晶屏LCD 液晶模块 |
DM642开发板/DM642实验箱 | DM6446开发板/DSP实验箱 | DSP仿真器 液晶屏 摄像头等 |
DM3730/AM3715/AM3359 | OMAP3530AM1808AM3517 | 飞思卡尔Cortex-A9开发板 | ATMEL系列ARM开发板 | NXP LPC3250 LPC1788 | Samsung系列ARM开发板 | STM32系列F207/F407 | ARM开发板配件-仿真器 模块 |
Realv210 S5PV210开发板 | Real6410开发板 ARM11 | WIFI GPS GPRS模块摄像头 |
NXP LPC开发板 ARM7 | Cortex-M3 STM32开发板 | ARM小系统模块(初学勿选) | 开发工具 ARM仿真器 调试器 | TFT液晶屏LCD 液晶模块 |
keil ARM仿真器/开发工具 | STM32开发板 Cortex-M3 | NXP LPC开发板Cortex-M3 | ATMEL系列 ARM开发板 | Luminary EKK8962开发板 | Freescale i.MX31开发板 | 三星s3c2440 s3c6410开发板 |
Exynos4412开发板A9四核 | UT-S5PV210 S5PC100 | UT-S3C6410开发板 ARM11 | idea 6410开发板 ARM11 | UT-S3C2450开发板 ARM9 | UT-S3C2416开发板 ARM9 | UT-S3C6410核心板 工控 |
Xilinx开发板 FPGA开发套件 | altera开发板 FPGA开发套件 | FMC模块 配件 下载线 |
DM642开发板/DM642实验箱 | DM6446开发板/DSP实验箱 | DSP仿真器 液晶屏 摄像头等 |
s3c2410 ARM9 FS2410 | s3c2440开发板 ARM9 | s3c44B0开发板 ARM7 | s3c6410 2450 2443/13 | PXA270 PXA320 PXA255 | Atmel 9200 9261 9G20 | Philips NXP开发板YL-LPC | FS-EP9315开发板ARM9 | LCD液晶屏TFT真彩/触摸屏 | ARM仿真器/仿真调试工具 | ARM开发板配套ARM核心板 |
三星s3c2410 s3c44B0 | 三星s3c6410 s3c2443 | Intel PXA270 PXA320 | UP-CUP OMAP5910平台 | FPGA Xilinx altera平台 | 配件-仿真器 模块 液晶屏LCD | 龙芯开发板UP-DRAGON-I | 物联网教学科研设备 | EDA/FPGA/SOPC教学科研 |
utu2440-F-V4.5 含核心板 | utu2440-S-V4.1 单板结构 | YC2440-F-V5.1开发板 豪华型 | YC-ePC-A系列人机界面 | Mars-EDA套件CPLD FPGA | 触摸屏LCD 摄像头 WI-FI模块 |
ARM开发板/开发平台 | FPGA开发板/开发平台 | 编程器/烧写器下载器烧录 | ZLG 仿真器ARM FPGA DSP | ZLG周立功逻辑分析仪 |
DSP初学者开发套件(DSK) | DSP仿真器/仿真系统 | DSP开发板/DSP试验箱 | DaVinci系列多媒体平台 | Xilinx FPGA大学计划产品 | SEED教学实验系统 | FPGA/DSP FPGA开发板 | TI原厂开发板套件/CCS软件 |
ARM开发板 | XSCALE开发板 | ARM仿真器 | SOPC开发板 | DSP开发板 | 达芬奇系列DSP开发平台 | DSP仿真器 | DSP实验箱 | DSP专业研究平台 | ARM实验箱系列 |
广嵌实验室项目产品 | GEC2440/GEC6410开发板 |
泰克Tektronix示波器 | 普源RIGOL示波器 | USB虚拟示波器 |
UT-S5PC100 UT-S5PV210 | UT-S3C6410开发板 ARM11 | idea 6410开发板 ARM11 | UT-S3C2450开发板 ARM9 | UT-S3C2416开发板 ARM9 | UT-S3C6410核心板 工控 | 开发板模块wifi gps等 |
EMA OMAP3530开发板 | EMA OMAP 3530核心板 |
三星s3c2410 s3c44B0 | 三星s3c6410 s3c2443 | Intel PXA270 PXA320 | UP-CUP OMAP5910平台 | FPGA Xilinx Altera平台 | 配件-仿真器 模块 液晶屏LCD | 龙芯系列 UP-DRAGON-I |
utu2440-F-V4.5 含核心板 | utu2440-S-V4.1 单板结构 | YC2440-F-V5.1开发板 豪华型 | 触摸屏LCD 摄像头 WI-FI模块 | Mars-EDA套件CPLD FPGA | ePC系列工控一体机ARM9 A8 |
ARM开发板/开发平台 | FPGA开发板/开发平台 | 编程器/烧写器下载器烧录 | ZLG 仿真器ARM FPGA DSP | ZLG周立功逻辑分析仪 |
DSP初学者开发套件(DSK) | DSP仿真器 | DSP开发板 | DSP实验箱 | Xilinx FPGA大学计划产品 |
ARM开发板 | XSCALE开发板 | ARM仿真器 | SOPC开发板 | DSP开发板 | 达芬奇系列DSP开发平台 | DSP仿真器 | DSP实验箱 | DSP专业研究平台 | ARM实验箱系列 |
ARM开发板S3C6410等 | Cortex-A8/ARM11仿真器 | ADSP Blackfin开发板 | FPGA Spartan-3E开发板 |
GEC2410开发套件ARM9 | GEC2440开发套件ARM9 |
泰克 示波器 |
敷衍移植 linux 到别的开辟板的人来说,编写 boot loader 是一个不可克制的进程。敷衍学习linux的人来讲,编写 bootloader 也是一个很有寻衅性的变乱。本文通过对 linux引导协议举行阐发,过细叙述了怎样编写一个可以在 i386 呆板上引导 2.4.20内核的底子的bootloader。
linux运行在掩护模式下,但是当呆板启动复位的时间却处于实模式下。以是写bootloader做的变乱也是在实模式之下的。
linux的内核有多种格局,老式的zImage和新型的bzImage。它们之间最大的差别是敷衍内核体积大小的限定。由于zImage内核须要放在实模式1MB的内存之内,以是其体积受到了限定。如今采取的内核格局大多为bzImage,这种格局没有1MB内存限定。本文以下部分紧张以bzImage为例举行阐发。
bzImage内核从前向后分为3个部分,前512字节被称为bootsect,这便是软盘引导linux时用到的bootloader,要是不从软盘引导,这部分就没有效,此中存储了一些编译时天生的内核启动选项的默认值。从512个字节开始的512*n个字节称为setup部分,这是linux内核的实模式部分,这部分在实模式下运行,紧张结果是为掩护模式的linux内核启动准备环境。这个部分着末会切换进入掩护模式,跳转到掩护模式的内核实行。着末的部分便是掩护模式的内核,也便是真正意义上的linux内核。此中n的大小可以从bootsect后半部得到,过细地点可以参阅linux boot protocol。
第一步,打开冰箱门;第二步把大象放到冰箱里……不要笑,进程便是这么大抵。起首须要把linux内核的setup部分拷贝到9020H:0开始的地点,然后把掩护模式内核拷贝到1MB开始的地点,然后根据Linux Boot Protocol 2.03的内容设置参数区的内容,基地点便是9000H:0,着末利用一条ljmp $0x9020,$0跳转到setup段,剩下的变乱便是linux本身的了^_^,公然大抵吧!
4.THE LINUX/I386 BOOT PROTOCOL
这个便是我们引导linux所利用的协议,它的位置在:Documetation/i386/boot.txt中。内里过细的写了引导linux所须要知道的齐备知识,敷衍别的体系布局的CPU,也肯定存在着雷同的东东,仿照本文的要领就可以了。
固然我们不指定恣意参数linux内核也可以启动,但是如许有大概启动进入一个我们不支持的framebuffer模式,导致没有恣意屏幕表现;也大概mount了错误的根分区失败,导致No Init Found的kernel panic。以是我们必须要指定一些东西。
要是你像我一样是一个懒人,那么可以直接把bootsect拷到9000H:0的位置,利用软盘引导时它会把本身复制到这个地方的,这内里有些默认的设置,详情请见boot.txt。
起首是root的位置,这里bootsect_pos指向的是9000H:0的地点。
bootsect_pos[0x1fc] = root_minor; bootsect_pos[0x1fd] = root_major; |
此中root_minor和root_major分别是root的主配置号和次配置号。
当前表现模式:
bootsect_pos[0x1fa] = 0xff; bootsect_pos[0x1fb] = 0xff; |
这两个数值相称于引导参数vga=0xHHH的值,两个0xff代表文本模式。
bootsect_pos[0x210] = 0xff; |
这是在设置你的bootloader的典范,着实只要不是0就行,由于0代表的loader太旧无法引导新的内核,setup发明这个后就会停下来。根据典范你应该写成0xff,这表现未知的boot loader,要是你的bootloader已经得到了一个官方分派的type id,那就写上本身的数值。
要是你如今的环境是一无全部,那么必须利用bios克制大概ATA指令去读硬盘了,不过要是你手中要是有底子的DOS体系,那么就可以利用DOS的步调了。为了可以大概利用整个4GB的地点空间,我利用了WATCOM C写了个小步调读内核,不过你可以仿照bootsect内里的做法,在实模式中读一部分,然失队入到掩护模式拷贝到1MB以上,然后再从实模式读一部分……须要过细1:9000H:0也是DOS占用的地点空间,以是读完内核后就不要返回DOS了,不然会有标题;
过细2:肯定包管是纯DOS,不要加载HIMEM大概EMM386如许的东西,它们会使上面的引导进程失败。loadlin倒是可以来者通吃险些全部的DOS,不过它的作者也是这方面的大牛,对DOS下的内存办理非常的熟习。我们如今研究这些陈腐的东西很难找数据了,何况我们是在写bootloader,不是DOS killer^_^。
1)initrd
initrd是启动时的一个小假造盘,一样通常用它来实现模块化的内核。引导initrd的要领紧张有两个要点:
第一,把initrd读入内存,我们可以仿照大多数boot loader的要领把它放在内存的最高端;
第二,设置initrd的肇始位置和长度
bootsect_pos[0x218]开始的4个字节放的是肇始物理地点,bootsect_pos[0x21c]开始的4个字节放的是initrd的长度。
2)command_line支持
用command_line你可以给内核传一些参数,本身定制内核的活动。我是如许做的,起首把command_line放在9900H:0的地点里,然后把9900H:0的物理地点存放在bootsect_pos[0x228]开始的4个字节内里。过细肯定是物理地点,以是你应该放99000H这个数,然后内核就会辨认你的command_line了。
写本文的目标紧张是为了用最少的语言和最短的时间阐发bootloader的原理,真正的权势巨头数据还是要看linux内核源码和boot.txt文件。我曾经写过一个例子loaderx,利用WATCOM C和TASM,WATCOM C是一个可以在DOS下天生能访问4GB物理地点步调的C编译器,内里也有过细的表明和文档阐发。可以从下面的地点下载:loaderx.tar.gz
博航网 www.broadon.net 版权所有
京ICP备10051899号-2 京公网安备110108006479号