头条资讯2024年10月12日发布:Bootloader引导过程分析
⭐发布日期:2024年10月12日 | 来源:头条资讯
【澳门二四六免费资料大全499】 |
【澳门最快最精准资料大全】 |
【澳门一肖一码100中奖网站】 | 【新澳门六开彩资料大全2248】 | 【今晚澳门三肖三码开一码】 | 【澳门刘伯温四肖八码期期准一肖w】 | 【72385.com】 | 【2021澳门天天开彩好资料】 | 【2021年澳门全年免费资料】 | 【944cc资料免费大全香港】 |
【新奥门精准资料大全】 | 【一肖一码100%】 | 【新澳门六开彩资料软件】 | 【新澳门规律公式】 | 【香港图库大全资料免费】 | 【澳彩二四六天天结果】 | 【今晚必中一码一肖澳门】 | 【7777788888精准管家婆】 |
一、Bootloader基本架构
大致可以分为三部分:
1. 固件部分。这部分即为stage1,为加电或复位后CPU执行的最开始的指令地址。它不会被加载进RAM,只初始化硬件,以及将mini_loader加载进内存。
2. mini_loader部分。这部份主要任务是将CFE加载进内存,并且解压。
3. CFE部分。这部分进行硬件环境初始化,并进行image的更新,以及加载kernel。
Bootloader在flash上的布局如下图所示:
二、 Broadcom Bootloader引导过程代码分析
1) 加载mini_loader
Broadcom Bootloader在系统加电以后从src\shared\boot.S中的第一行代码开始执行。boot.S文件的主要任务有:
1.判断芯片类型
2.设置时钟
3.缓存的初始化
4.把Mini-loader加载进RAM
5.C跳转,即进入Mini-loader中执行c_main函数
2) 执行mini_loader
文件:src\shared\load.c
函数名:c_main()
{
...系统初始化…
lode();//加载CFE,并解压缩;
……..
((void(*)(void))LOADADDR)();//跳转到CFE中执行cfe_main()
}
3) 执行CFE
文件:src\cfe\cfe\main\cfe_main.c
函数名:cfe_main()
主要功能:完成硬件的初始化,包括ether driver,PCI,console等外部设备的初始化,image更新,引导kernel等。
void cfe_main(int a,int b)
{
……
board_console_init(); //硬件初始化,包括LED的初始化
cfe_say_hello(); //CFE开始信息
board_device_init(); //设备初始化,包括ether driver等设备
cfe_startup_info(); //输出环境信息,例如存储空间使用情况
cfe_init_ui(); //UI接口的初始化,包括console命令行初始化
board_final_init(); //硬件部分初始化
cfe_autostart(); //image更新,加载kernel
cfe_command_loop(); //如果上一步按了Ctrl-c,则在此循环执行
……
}
4) ether driver
ether driver相关结构体
struct cfe_driver_s {
char *drv_description;// Description of device for SHOW commands
char *drv_bootname; // Devices name prefix for open() */
int drv_class;
const cfe_devdisp_t *drv_dispatch;
void (*drv_probe)(struct cfe_driver_s *drv,unsigned long probe_a,unsigned long probe_b, void *probe_ptr);
} cfe_driver_t;
5) image更新与kernel引导
一个完整的image可能的格式
struct trx_header {
uint32 magic; /* "HDR0" */
uint32 len; /* Length of file including header */
uint32 crc32; /* 32-bit CRC from flag_version to end of file */
uint32 flag_version; /* 0:15 flags, 16:31 version */
uint32 offsets[TRX_MAX_OFFSET]; /* Offsets of partitions from start of header */
};
Kernel的引导过程
三、 Broadcom cfe下操作
# 在 CFE commands获取帮助
CFE>help
#在CFE >状态下修改网络配置
设定MAC地址:
CFE>macprog 97405 1027 8 //芯片类型,序列号,修正版本号
或者
CFE>macprog2 00-10-18-04-22-03
你可以输入CFE>help macprog 或者CFE>help macprog2 获得更多信息
设定IP地址:
自动获取时输入:
CFE>ifconfig eth0 –auto
手动设置时:
CFE>ifconfig eth0 down
CFE>ifconfig eth0 192.168.10.64
CFE>ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE
CFE>ifconfig eth0 up
# 在 CFE >状态下通过TFTP存储kernel到flash
CFE>ifconfig eth0 –auto 或者 CFE>ifconfig eth0 192.168.10.64
CFE>flash -noheader 192.168.10.115:vmlinuz-7405b0 flash0.kernel
# 在 CFE >状态下通过TFTP更新到新的cfe程序
CFE>ifconfig eth0 –auto 或者 CFE>ifconfig eth0 192.168.10.64
CFE>flash –noheader 192.168.10.115:cfe_le_400.bin flash0.cfe
# 在 CFE >状态下通过TFTP导入initrd kernel
CFE>ifconfig eth0 –auto 或者 CFE>ifconfig eth0 192.168.10.64
CFE>boot –z –elf 192.168.10.115:vmlinuz-initrd-7405b0
显示Login:时输入root
# 在 CFE >状态下通过TFTP导入常规kernel (可以理解为是initrd kernel 的精简版本)
CFE>ifconfig eth0 –auto 或者 CFE>ifconfig eth0 192.168.10.64
CFE>boot -z -elf 192.168.10.115:vmlinuz-7405b0 rootfstype=jffs2 root=/dev/mtdblock0 ro
# 在 CFE >状态下从flash分区中导入压缩的内核
CFE>boot -z –elf flash0.kernel: rootfstype=jffs2 root=/dev/mtdblock0 ro
显示Login:时输入root
# 在 CFE >状态下设置为开机自动从flash分区中导入内核
CFE>setenv -p STARTUP “boot -z -elf flash0.kernel: rootfstype=jffs2 root=/dev/mtdblock0 ro”
# 取消自动从flash分区中导入内核(重启板子后会停止在CFE >状态)
CFE>unsetenv STARTUP
# 在 CFE >状态下从磁盘加载跟文件系统
CFE>boot –z –elf 192.168.10.115:vmlinuz-initrd-7405b0
stbutil 192.168.10.115:
Select option 3 // Install root filesystem on harddisk
CFE>ifconfig eth0 -auto
CFE>boot -z -elf 192.168.10.115:vmlinuz-7405b0 rootfstype=ext2 root=/dev/hda1 rw
# 在 CFE >状态下显示FLASH中的可用分区(也可以显示其他设备分区)
CFE>show devices
# 在 CFE >状态下存储文件到一个可用的FALSH分区
CFE>flash -noheader IPADDRESS:filename FLASHPARTITON (可用的FLASHPARTITON 可以通过show devices 命令查看)
# 在 CFE >状态下进入vmlinuz-initrd内核后,通过TFTP安装根文件系统到flash
CFE>boot –z –elf 192.168.10.115:vmlinuz-initrd-7405b0
stbutil 192.168.10.115:
Select option 2 // Install RW JFFS2 rootfs on flash with no special setup 注意此操作执行后,会擦除flash!
# 安装应用软件到平台
如果是只读的文件系统,线先设置为读写权限(平台端):
mount -o remount,rw/
复制编译生成的应用软件包到NFS根目录(linux服务器端):
cd /home/ray/bcm/BSEAV/bin/refsw-20100514.97405-linux-uclibc.bin.tgz /opt/nfsroot/
挂载linux服务器的目录(平台端):
mount 192.168.10.115:/opt/nfsroot /mnt/nfs
然后建立brutus目录,解压/保存软件包,安装,执行(平台端):
mkdir /home/brutus
cd /home/brutus
tar zxvf /mnt/nfs/refsw-20100514.97405-linux-uclibc.bin.tgz
settop install
settop brutus 或者 nexus brutus
【澳门六叔公资料网址】 【王中王高手论坛资料手机版】 |
【949494王中王内部精选】 【澳彩结果历史记录四不像】 |
【澳门开马2024年结果查询】 【王中王72385.cσm】 |
【澳门六开彩天天免费资讯统计】 【2024澳门资料大全免费老版】 |
【2024澳门全年资料免费】 【澳门挂牌正版挂牌完整挂牌大全】 |
【一肖一码一一肖一子】 【王中王心水王中王论坛资料】 【马会传真,澳门免费资料使用方法】 |
发表评论
塔拉·莫里斯
9秒前:它不会被加载进RAM,只初始化硬件,以及将mini_loader加载进内存。
IP:69.76.7.*
El-Laithi
6秒前:10.
IP:15.96.6.*
宋木子
1秒前:168.
IP:89.13.6.*