资源简介
手写简易的bootloader在Mini2440上亲测成功。

代码片段和文件信息
#include “setup.h“
extern void uart0_init(void);
extern void nand_read(unsigned int addr unsigned char *buf unsigned int len);
extern void puts(char *str);
extern void puthex(unsigned int val);
static struct tag *params;
void setup_start_tag(void)
{
params = (struct tag *)0x30000100;
params->hdr.tag = ATAG_CORE;
params->hdr.size = tag_size (tag_core);
params->u.core.flags = 0;
params->u.core.pagesize = 0;
params->u.core.rootdev = 0;
params = tag_next (params);
}
void setup_memory_tags(void)
{
params->hdr.tag = ATAG_MEM;
params->hdr.size = tag_size (tag_mem32);
params->u.mem.start = 0x30000000;
params->u.mem.size = 64*1024*1024;
params = tag_next (params);
}
int strlen(char *str)
{
int i = 0;
while (str[i])
{
i++;
}
return i;
}
void strcpy(char *dest char *src)
{
while ((*dest++ = *src++) != ‘\0‘);
}
void setup_commandline_tag(char *cmdline)
{
int len = strlen(cmdline) + 1;
params->hdr.tag = ATAG_CMDLINE;
params->hdr.size = (sizeof (struct tag_header) + len + 3) >> 2;
strcpy (params->u.cmdline.cmdline cmdline);
params = tag_next (params);
}
void setup_end_tag(void)
{
params->hdr.tag = ATAG_NONE;
params->hdr.size = 0;
}
int main(void)
{
void (*theKernel)(int zero int arch unsigned int params);
volatile unsigned int *p = (volatile unsigned int *)0x30008000;
/* 0. 帮内核设置串口: 内核启动的开始部分会从串口打印一些信息但是内核一开始没有初始化串口 */
uart0_init();
/* 1. 从NAND FLASH里把内核读入内存 */
puts(“Copy kernel from nand\n\r“);
nand_read(0x60000 (unsigned char *)0x30008000 0x500000);
puthex(0x12345678);
puts(“\n\r“);
puthex(*p);
puts(“\n\r“);
/* 2. 设置参数 */
puts(“Set boot params\n\r“);
setup_start_tag();
setup_memory_tags();
setup_commandline_tag(“noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0“);
setup_end_tag();
/* 3. 跳转执行 */
puts(“Boot kernel\n\r“);
theKernel = (void (*)(int int unsigned int))0x30008000;
theKernel(0 1999 0x30000100);
/*
* mov r0 #0
* ldr r1 =1999
* ldr r2 =0x30000100
* mov pc #0x30008000
*/
puts(“Error!\n\r“);
/* 如果一切正常 不会执行到这里 */
return -1;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2014-05-23 03:04 my_bootloader\
文件 500 2014-05-23 01:48 my_bootloader\Makefile
文件 2216 2014-05-23 03:04 my_bootloader\boot.bin
文件 2260 2014-05-23 03:04 my_bootloader\boot.c
文件 25076 2014-05-23 03:04 my_bootloader\boot.dis
文件 36783 2014-05-23 03:04 my_bootloader\boot.elf
文件 255 2014-05-23 01:48 my_bootloader\boot.lds
文件 2392 2014-05-23 03:04 my_bootloader\boot.o
文件 4713 2014-05-23 01:48 my_bootloader\init.c
文件 2892 2014-05-23 03:04 my_bootloader\init.o
文件 6222 2014-05-23 01:48 my_bootloader\setup.h
文件 1601 2014-05-23 01:48 my_bootloader\start.S
文件 1084 2014-05-23 03:04 my_bootloader\start.o
相关资源
- 单片机、ADC0808809设计简易数字电压表
- 简易的电阻电容测量电路
- 简易古诗网页
- PLC简易程序大合集
- 简易绘图的制作 (一)WPF
- Bootloader源码分析(好东西).rar
- 简易绘图程序(计算机图形学课程设
- 用Socket写的简易FTP服务器和客户端
- 基于C 的简易FTP客户端(带源码)
- linux简易shell C实现
- 基于GTK的Linux环境下的简易任务管理器
- BootLoader和BSP
- 耐威网关软件防火墙简易版(附源码
- 基于S32K144的CANbootloader
- ARM7TDMI-S在嵌入式系统中的Bootloader代码
- swift-swift版本的简易WKWebview浏览器带加
- 易语言服务器源码易语言简易聊天室
- 文软快递单扫描识别软件 v8.1 简易版
- STM32的IAP-Bootloader程序
- STM32例程之Bootloader
- 使用PIC单片机开发的简易数字电压表
- 易语言客户端模块源码易语言服务器
- 基于AT89S52单片机简易计算器的设计
- Keithley-2000系列中文版简易使用说明
- mini2440全套裸机程序MDK 运行
- 51单片机实现蜂鸣器的简易歌曲播放器
- 基于STM32处理器的简易数码相机设计
- Spring Boot简易会员管理系统
- 简易客房管理系统
- 国嵌mini2440项目开发手册
评论
共有 条评论