redboot移植学习笔记
- 格式:docx
- 大小:16.05 KB
- 文档页数:2
一、 在虚拟机VM下的网络设置1、用桥接试最简单只需要当做一个也宿主机一样在同一网络内的机器,正确认设置网络信息,只IP不同,其它全一样。
关闭宿主机和虚拟机操作系统中的防火墙。
其中宿主机的防火墙包包括操作系统和杀毒软件的防火墙2、说明、A、VMnet1 (用于Host-Only)B、本地机C、VMnet8 (用于Nat)2、右键属性B3、右键属性A红框内是在LINUX中设置的网关和掩码4、在LINUX中设置IP信息说明 Ip 为与网关同继的 192.168.0.* 这里是192.168.0.25、启动重新启动服务su/sbin/service network restart首先在windows XP 中,查看所有的网络连接,你应该发现除了原有的网卡之外,又多了Vmnet1和Vmnet8。
如果你看了一下说明书应该知道,vmnet1是 hostonly的接口,而Vmnet8是使用NAT的网络接口。
在这里我们既不想用VMWARE自带的DHCP也不想用他的NAT 所以我们知关心 VMnet1在进一步操作之前先说一下idea:我们将使用Host-Only这个网络接口连接虚拟机和主机,然后利用windows Xp里面自带的internet连接共享(实际上是一个简单的路由NAT)来让虚拟机通过原来的网卡进行外网的访问。
OK, let's go(1)查看你的连接外网的网卡的属性,选择“高级”标签,设置成允许共享,并设定允许的网络接口为VMNET1。
(2)再插看一下你的VMnet1 的属性,看一下TCP/IP协议的设置,你发现已经被自动设置为192.168.0.1/255.255.255.0。
(3)windows下的设置完成,转入到跑linux的虚拟机。
将你的eth0的ip地址设置为静态的(如果安装时没有选静态的话)(4)windows下的设置完成,转入到跑linux的虚拟机。
将你的eth0的ip地址设置为静态的(如果安装时没有选静态的话)。
竭诚为您提供优质文档/双击可除redhat学习心得篇一:Linux学习心得Linux学习心得总结第二事业部Kevin.sunLinux简介:Linux是一套免费使用和自由传播的类unix 开源操作系统,是自由软件和开源代码的经典范例,由世界各地的成千上万的程序员设计和实现的。
具有开放性、多用户、多任务、出色的速度性能、良好的用户界面、丰富的网络功能、可靠的系统安全、良好的可移植性、标准兼容性等特点,在服务器,嵌入式,工控等方面都有广泛的应用。
目前风靡全球的Android智能系统也是基于Linux内核开发的。
第一次接触Linux是在上大二的时候,一位给我们上课的老师在课间闲聊时用教训的语气给我们说,计算机专业的学生应该去好好学Linux,你要不会Linux都不好意思说自己是计算机科班毕业的(当然这有点夸张了,这位老师一直是研究Linux的,对Linux比较狂热),总之他说了一大堆Linux的好处,比如开源啊,稳定性强,支持平台多等等。
其实之前早就对Linux有所耳闻,但觉得这是专业人士才搞的东西,很高深,我离那一步还早着呢,所以当时也没听懂多少,听完过后只觉得Linux是个开源免费的操作系统,在Linux上面开发是比较有档次的,有前途的。
于是,一兴奋,回去就找了个师兄借了张Redhat9.0(Linux一个比较稳定的商业发行版本)的光盘,在自己电脑上装了个Linux系统,在上面装上了QQ,音视频播放器,练了练Linux的命令,编译运行了"helloworld"之类的入门程序,玩了几天后,我发现了一个比较严重的问题,在Linux上没法玩魔兽和cs,兴奋劲一过,我的第一个Linux系统就在我的电脑分区下长眠了。
到后来,学校开了些以Linux为实验平台的课程,于是又把Linux系统拿出来,在上面做老师布置的作业,对Linux 也更了解了,自己也能勉强在那上面做些简单的应用开发,学会了更多的命令,了解了何为gcc,makefile,vi,gdb,知道了怎样调试自己的程序,仅此而已。
redflag认证系统管理部分笔记一.安装1.安装方式CDROM HDA FTP NFS 无人职守(keyboard=us)ks.cfg。
cp ks.cfg a:\ 。
boot:linux ks=floppyRedHat:CDROM (文字图形软盘)f:。
cd dosutils 。
rawrite -f f:\images\boot.img -d a:2.安装过程1.分区/bootfdiskp 打印当前分区表n 增加一个新的分区t 改变一个分区类型l 列出支持分区类型a 激活一个分区d 删除一个分区w 保存分区表q 退出2.lilo的安装lilo(linux loader)mbr(master boot record)br(boot record)系统启动过程bios-mbr-active-br-sysfile-boot 硬件问题网卡ne.cgcc ne.cne.o/lib/modules/netmodprobe ne显卡Xconfigurator3.系统启动文件vmlinuz-2.2.16-22lilo.conf文件中指定init进程-查找运行的脚本程序/etc/rc.d/rc(x).dk:kills:startS20>S30重启某种服务/etc/rc.d/init.d/scriptrestart|reload|start|stop-增加自己的启动脚本一、vi /etc/profile二、 1.制作启动脚本,拷贝至 /etc/rc.d/init.d目录中 (Ex:serv)2.建立链接文件ln -s /etc/rc.d/rc3.d/S99 /etc/rc.d/init.d/serv4.关闭系统及重启关机: halt ;init 0;shutdown -rh now;重启: reboot;init 6;shutdown -rn now;5.常见问题解决1.lilo出错-启动盘-用安装光盘引导系统mount -t ext2 /dev/hda3 /tmpchroot /tmp/sbin/lilo-使用loadlinloadlin vmlinuz root=/dev/hda3loadlin vmlinuz root=/dev/hda3 init=/bin/bash -使用升级方式安装不选择任何包,只安装lilo2.root密码忘记/etc/passwd单用户在fat分区修改文件3.fstab文件出错mount -o rw,remount /dev/hda3 /4.开机出错fsck /dev/hda6二、用户管理1.用户Uid root (0)<10为系统用户su su -登陆超时:vi /etc/profileTMOUT=600/etc/passwd2.添加用户1.手工添加/etc/passwd/etc/group/home/username拷贝shell脚本设置口令2.系统添加adduser-d 指定用户主目录-e 指定失效期月/日/年-s 指定shelladduser -s /usr/bin/passwd usename 3.用户安全设置telnet:指定用户shellftp:指定用户为guestuser4.用户修改usermod-d 指定用户主目录-e 指定失效期月/日/年-s 指定shell5.删除用户userdel三、软件包管理rpm(RedHat Package Manager)1.软件包名dhcp-2.0-7.i386.rpm软件名-版本号-发行号-适用机型-扩展名2.常用命令-ivh 安装-replacepkgs 替换-nodeps 摆脱依赖关系-e 删除-Uvh 升级--oldpackage 降级3.查询-qa 查询所有包-ql 查看包文件存放位置/usr4.验证-Va 验证所有包-Vf 验证指定包验证码说明S 文件尺寸L 符号链接T 文件修改日期U 用户5.使用技巧rpm -qf 查看未知文件rpm -qdf 查看正运行程序的文档信息rpm -qip 了解rpm包的作用实验:网站下载netscape6.0.rpm包安装srv2(192.168.103.1:8080)vip vip192.168.0.0192.168.103.0四、系统维护常用命令1.dfdfdf -t ext22.du-m 以MB为单位--summarize 得到最后统计结果du --summarize -b /var/*|sort -nr3.statfind /usr |xargs stat|grep "Can't stat">error 4.freefree -m5.topk r ?6.uptime who7.write wall8.expr9.sleep10.fingerst12.dmesg13.dircolors14.mailh 生成列表d 删除邮件d 1-9DHCP服务器Dhcp(dynamic host configuration protocol)动态主机分配协议具体配置:Server:vi /etc/dhcpd.confsubnet 192.168.0.0 netmask 255.255.255.0{range 192.168.0.10 192.168.0.20;//范围default-lease-time 600; //租用时间option subnet-mask 255.255.255.0;//子网掩码option routers 192.168.0.1;//路由设置option domain-name-servers 192.168.0.2;//设置域名服务器}保存,重启/etc/rc.d/init.d/dhcpd restartClient:window:网上邻居client:dhclient netconf192.168.1.0 192.168.1.11192.168.2.0 192.168.2.11smbclient //Eloo-Server/dhcp -I 192.168.0.98mget *'1. 使用uptime命令监视系统状态a) #uptime12:54pm up 27 min, 2 users, load average: 0.00, 0.00, 0.00现在时间启动了多久几个用户在线 CPU平均负载时间(共3个)第一个: 1分钟内平均负载值第二个: 5分钟内平均负载值第三个: 15分钟内平均负载值当系统负载过大时,说明有多条命令被阻塞在内存和I/O系统中在大型linux系统中,负载为2和3表示轻载,5和6 表示中等程度的负载,10以上为过载2. ps进程管理a) #ps –efUID PID PPID C STIME TTY TIME CMDroot 1 0 0 12:27 ? 00:00:01 init [3]root 2 1 0 12:27 ? 00:00:00 [kflushd]root 3 1 0 12:27 ? 00:00:00 [kupdate]root 4 1 0 12:27 ? 00:00:00 [kpiod]-e : 在命令执行后显示环境-f : 完整显示输出1) 进程用户ID(UID)2) 进程ID (PID)3) 父进程ID (PPID)4) CPU 调度情况(C)5) 进程启动的时间(STIME)6) 进程共占用CPU的时间(TIME)7) 启动进程的命令(CMD)b) 使用PS命令分析系统性能的方法主要有:1) 首先,根据用户ID寻找由同一用户执行的许多相似任务,这些任务很可能是因为用户运行的某个脚本程序在后台启动多个进程而造成的。
特别提示∶切记您要在使用中学习,而不是在记忆中学习试验6Linux文件系统的要点估计时间:90分钟目标:深入了解linux文件系统知识,包括:创建和使用links,使用slocate和find,归档压缩文件。
试验的起点:一个Red Hat Linux系统。
第一步:创建和使用links任务:1.在早些时候的试验,你已经拷贝了一个文件/usr/share/dict/words到你使用的用户student的主目录~/words.在这个案例里,你不需要编辑文件-拷贝一个文件到你的主目录就可以在试验的期间使用了。
2.为了要避免原始文件和副本之间的混乱。
在student’s主目录中删除words的副本$ cd$ rm words3.虽然你可能没有在那时了解它, 这个文件/usr/share/dict/words 的副本实际上是一个软link。
列出内容下面目录 /usr/share/dict的内容查看link和它的参数。
$ ls –l /usr/share/dicttotal 404-rw-r—r-- 1 root root 409305 Apr 3 10:29 linux.wordslrwxrwxrwx 1 root root 11 Apr 20 17:33 words ->linux.wordsa.你能告诉我words是一个软链接吗?b.为什么words的文件大小是11?c.words允许所有人访问。
这和linux.words文件用什么冲突?除了root用户,其他用户能够能在linux.words上面写数据吗?4.再一次列出文件,这次显示相应的indeds号。
为什么两个文件会有相同或不同的inodes号?$ ls –I /usr/share/dict5. 现在在你的主目录中产生两个的代号和硬链接到/usr/share/dict/linux.words:$ ln –s /usr/share/dict/linux.words soft$ ln /usr/share/dict/linux.words hard6. 测试一下,你新建的链接两者都指到 linux.words 文件:$ head hard soft7. 检查你所有文件的link , 然后在下面回答问题:$ ls –il hard soft$ stat had soft报告文件大小,hard_______和soft_______.被占用的真实的空间,hard_______和soft_______.你怎样解释这两个link占用空间的差别。
Part1:remap.remap比较简单,和MMU的功能可以看做是等价的,只是一般remap地址估定为0x0 ,网上有个帖子叫<<ARM remap与重定位摘抄>>专门讲了它对remap的理解,对remap的作用是这样讲的: 当ARM处理器上电或者Reset之后,处理器从0x0取指。
因此,必须保证系统上电时,0x0处有指令可以执行。
所以,上电的时候,0x0地址处必定是ROM或者Flash(NOR)。
但是,为了加快启动的速度,也方便可以更改异常向量表,加快中断响应速度,往往把异常向量表映射到更快、更宽(32bit/16bit)的RAM中。
但是异常向量表的开始地址是由ARM架构决定的,必须位于0x0处,因此,必须把RAM映射到0x0。
文中提到了ARM处理器remap的三种情况,如下1)如果处理器有专门的寄存器可以完成Remap。
那么Remap是通过Remap寄存器的相应bit置1完成的。
如Atmel AT91xx2)如果处理器没有专门的寄存器,但是memory的bank控制寄存器可以用来配置bank的起始地址,那么只要把RAM的起始地址编程为0x0,也可以完成remap。
如samsung s3c4510 .3)如果上面两种机制都没有,那么Remap就不要做了。
因为处理器实现决定了SDRAM对应的bank地址是不能改变的。
如Samsung S3c2410.不过我的看法有点稍微不一样,如果上面两种机制都没有,那么Remap就不要做了,它给的典型例子是Samsung S3c2410 ,2410虽然sdram对应的bank地址不能改变,但它有MMU功能, MMU可以起到remap的作用,常用的最典型的应该是例子Samsung S3c44b0,它既没有mmu,又SDRAM对应地址有没办法改变.顺便补充下除了4510可以改变每个bank的地址,还有华邦的w90P740(arm7),呵呵,我现在用的U就是这款U,可以把bank的地址随意的设置.2.relocate .relocate (地址重定位),个人觉得这个是boot里面最麻烦也是最核心的部分,刚开始看boot代码的时候,它简直是我的噩梦,不知道大家分析boot的源码流程是否这样,也可能我大学不是计算机的,没学过编译原理(现在也没看过)对链接和加载一无所知,有两个星期非常痛苦,就是不懂人家boot里面的链接脚本为什么要那样写.网上关于uboot的帖子很多,但对链接加载这块,始终写的不详细,不知道是不是太过于基础了,高手都不愿意讲,最后自己找资料,发现其实一切痛苦的根源都是对链接和加载不太清楚造成的,但个人感觉boot除了初始化以外就是搬运程序,如何搬运?为什么要那样搬运都需要对硬件板的地址分布很清楚?而这些都是链接决定的,所以非弄清楚不可!1.我们为什么需要relocate ? 经济方面,(nandflash和norflash 每兆价格相差悬殊),把boot代码放在norflash里面(为什么不放在nandflash里面,因为nandflash读需要驱动支持,norflash可以直接访问),boot通常很小,只需要占用几十k的空间,所以只需要很小的norflash芯片,这样很便宜,而把应用程序通常很大,所以用价格低廉nandflash来储存,实际应用,通过执行boot程序,把nandflash里面代码和数据搬运到内存中来执行,这样比程序直接放在norflash里执行,可以.另外还有运行速度方面的差别,程序在norflash里执行的速度远远小于在sdram中执行的速度,为了追求更高的速度,也需要relocate,让程序在sdram里面执行.2.关于加载域(VMA)和运行域(LMA)(加载域和运行域,加载域是程序代码在ROM、FLASH中的排列次序及地址安排,运行域是程序运行时代码在SRAM、SDRAM中地址安排;存储代码时按照加载域存放在FLASH中,运行时再从FLASH中取出代码到RAM运行域运行,一段代码的加载域和存储域可以不同),杜春雷在它那本经典的<<arm体系结构与编程>>一书专门有一章来讲加载域和运行域不一致的情况,但我当初接触了它的这些加载域和运行域后,看uboot的lds ,uboot的lds没有设置LMA,只是设置了VMA,为此我疑惑很久.直到耐心的看了那本链接器和加载器的书才豁然明白( /viewthread.php?tid=817770 ),任何一个链接器和加载器的基本工作都非常简单: 将更抽象的名字与更底层的名字绑定起来,好让程序员使用更抽象的名字编写代码,链接器的就是把源文件进行符号解析,把解析出来的符号和地址的进行绑定,把全局变量,函数,标号等等这些符合和地址绑定起来.3.boot上电后开始能够正确执行还有个很重要的原因,是要保证boot在系统加电或复位后最初执行的代码是跟地址无关的,(即在代码搬运前所执行的代码是与地址无关),地址无关即地址无关代码生成的这个映象文件可以被放在内存中的任何一个地址上运行。
一:准备移植1、从下面的官网下载最新的U-boot。
用google英文版搜索最新的u-boot源码ftp://ftp.denx.de/pub/u-boot/2、建立sourceinsight工程a、解压并在E:\colin weidongshan\transplant_u-boot-2012.04.01\u-boot-2012.04.01建立SIb、添加文件到SI工程1、点击"Add All",选中“Include top level sub-directories”和“Recursively add lowersub-directories”点击“OK”2、选中“Board”目录,点击“Remove Tree”,去掉总个目录进入“Board\Samsung\Smdk2410\”,点击"Add All"3、选中“Arch”目录,点击“Remove Tree”,去掉总个目录进入“Arch\Arm\Cpu\Arm920t\”,双击选中“Cpu.c”“Interrupts.c”“start.S”。
进入“Arch\Arm\Cpu\Arm920t\S3c24x0\”,点击"Add All"进入“Arch\Arm\”,选中"Dts"目录,点击"Add Tree"进入“Arch\Arm\Include\Asm\Arch_s3c24x0”,点击"Add All"进入“Arch\Arm\Include\Asm\”,点击"Add All",去掉“Include top level sub-directories”和“Recursively add lower sub-directories”前面的勾,表示只加顶层目录的文件进入“Arch\Arm\Include\Asm\”,单击选中"Proc-armv",点击"Add Tree"进入“Arch\Arm\Lib\”,点击"Add All"4、选中“Include”目录,点击“Remove Tree”,去掉总个目录进入“Include\”,点击"Add All",去掉“Include top level sub-directories”和“Recursively add lower sub-directories”前面的勾,表示只加顶层目录的文件进入“Include\”,单击选中"Andestech",点击"Add Tree"进入“Include\”,单击选中"Asm-generic",点击"Add Tree"进入“Include\”,同上选中除"Configs"目录外的所有目录,点击"Add Tree"。
Redboot初级调试JARI TOOL由于Redboot是嵌入式系统的一个调试工具,所以一个较好的操作过程是将编译好的Redboot或其他程序直接下载到SDRAM中去试验,而不必每次修改都在启动板子前烧写flash。
当然,我就是想试试redboot三种模式。
准备条件:板子里已经有了一个boodloader如redboot[rom],可以启动串口和网口。
1、redboot三种模式1.1 ROM模式该模式中,RedBoot存放在ROM中,并在ROM中执行。
(可以是flash或EPROM)。
在内存资源有限时,使用该模式启动。
在该模式下,Flash相关的命令不能修改RedBoot代码所在的Flash存储区域。
如果想修改,应使用RAM模式启动。
1.2 ROMRAM模式该模式中,RedBoot存放在ROM中,但在运行前将会被复制到RAM中。
与ROM模式相比这样做使用的RAM资源较多,但有两个好处:通常该模式运行更快(只针对较慢的开发板上),而且可以在程序运行时修改Flash中指令所在的存储区。
1.3 RAM模式在该模式下,RedBoot不仅在内存中运行,而且实际的存储位置也在内存中。
此模式可以用于在需要的时候修改Flash中已有的ROM模式映像;或者是当ROM中已经有其他启动程序(非Redboot)时,用于在开发板上加载RedBoot 启动程序。
要独立启动一块电路板的,只能用ROM和ROMRAM模式,而RAM模式必须要由板上的其他ROM监控程序(ROM monitor)加载才能运行。
如果板上已有ROMRAM 模式的启动代码,就无需使用RAM模式。
当RAM启动模式被烧到Flash中时(因为从Flash中加载它很快),通常在FIS目录项中被命名为“RedBoot[RAM]”。
2、ROM模式参考本人编写的《Redboot2.02的ixp465移植》完成redboot生成。
串口和网口正常工作。
3、ROMRAM模式3.1 ROMRAM模式修改与启动参照2,对packages/hal/arm/xscale/ixdp465/current/include/pkgconf 中mlt_arm_xscale_ixdp465_romram.h修改如下:#define CYGMEM_REGION_ram_SIZE (0x10000000 0x8000000)//真实值//未修改,是4个flash sectors,应大于reboot.bin size的整数个sector。
UCOS-II移植ARM的读书笔记导读:昨天晚上边看移植代码边记下来的笔记不知道怎么回事在保存的时候竟然不见了,关键是我是第一次也是正式开始移植的学习之路啊,今天在工作之前先把昨天的笔记重新回顾一下,UCOS-II的移植需要提供2,真是很郁闷,昨天晚上边看移植代码边记下来的笔记不知道怎么回事在保存的时候竟然不见了。
5555。
一个晚上工作的结果啊,关键是我是第一次也是正式开始移植的学习之路啊。
真是够倒霉的。
今天在工作真是很郁闷,昨天晚上边看移植代码边记下来的笔记不知道怎么回事在保存的时候竟然不见了。
5555。
一个晚上工作的结果啊,关键是我是第一次也是正式开始移植的学习之路啊。
真是够倒霉的。
今天在工作之前先把昨天的笔记重新回顾一下,其实后来想想也许是件好事,可以让我今天在不借助其他的帮助的情况下自己看代码自己跟自己讲一遍,其实很多看起来是倒霉看起来是灰心的事情把我们的观点换一下那么就是一件好事。
这样的情况发生在我的身上已经挺多次了。
好啦,废话不说,开始补昨天的日记UCOS-II的移植需要提供2,3个文件分别介绍如下:一:OS_CPU.H1 与编译器有关的数据类型只是按照不同的编译器编写对应的数据类型的typedef对应于ARM7的数据类型的编写如下typedef unsigned char BOOLEAN; /* 布尔变量*/typedef unsigned char INT8U; /* 无符号8位整型变量*/typedef signed char INT8S; /* 有符号8位整型变量*/typedef unsigned short INT16U; /* 无符号16位整型变量*/typedef signed short INT16S; /* 有符号16位整型变量*/typedef unsigned int INT32U; /* 无符号32位整型变量*/typedef signed int INT32S; /* 有符号32位整型变量*/typedef float FP32; /* 单精度浮点数(32位长度)*/typedef double FP64; /* 双精度浮点数(64位长度)*/在上面定义的各种数据类型中按照ARM7的堆栈宽度选择INT32Utypedef INT32U OS_STK; /* 堆栈是32位宽度*/接下来一部分是为了兼容低版本UCOS的数据类型所编写的代码,在UCOS-II中暂不考虑2 与处理器相关的代码先定义中断的实现方式,预先设定的中断方式有三种,在ARM7中设置为方式2 #define OS_CRITICAL_METHOD 2 /* 选择开、关中断的方式*/接下来的一段是我暂时还没有完全搞懂的一部分,只知道是设定了12个软件中断的函数,当调用这些函数之前都会执行对应中断号的事情。
Redboot移植学习笔记
因为公司的mx27的板子就要出来了,bootloader要上去,linux也要上去,驱动... 最近几乎都在搞redboot,用source insight来阅读redboot真的有点力不从心,很多宏嵌套又嵌套(难道这才是传说中的嵌入式),很多时候跟进去再回过头来你才知道什么叫忘记,而且source insight对AT&T汇编的不支持,又试着用VIM +cscope...
redboot是ecos系统的bootloader,其可移植性很高(相对于U-boot来说),移植难度也不低。
移植的主要工作在于硬件抽象层(HAL)的修改,硬件抽象层HAL对处理器结构和系统硬件平台进行抽象,主要包括三大模块——体系结构抽象层(Architecture HAL)、变体抽象层(Variant HAL)和平台抽象层(Platform HAL)。
体系结构抽象层---主要是指ECOS所支持的具有不同体系结构的处理器系列,如ARM系列、PowerPC 系列、MIPS系列等等
变体抽象层---指的是处理器系列中某款处理器在Cache、MMU和FPU等方面所具有的特殊性。
如
S3C2510属于ARM系列中的ARM940T,在变体抽象层中就会具体地针对ARM940T的Cache等方面作出定义
平台抽象层---则是对当前系统硬件平台的抽象,包括了平台的启动、芯片选择与配置、定时设备、I/O 寄存器访问以及中断寄存器等等
在ecos/packages/hal/arm目录下是平台相关代码,平台抽象层代码是移植的重点
hal_arm_board.cdl---cdl文件使用cdl脚本语言描述该硬件设备(包或平台)的特性和常用指标。
cdl文件
实现系统在源码级的功能和指标配置,犹如一个项目管理高层对其仓库中组件特性的登记,只有登记后的包、组件和选项才能被操作系统配置工具识别和配置
以下是MX27的cdl文件钟的几段主要描述:
cdl_package CYGPKG_HAL_ARM_MX27ADS---这是mx27在ecos.db中所登记的包的名字,它下面包含了该板的一些基本设置和组件,如母体体系结构(parent)、包含的头文件、编译的C文件等
cdl_component CYG_HAL_STARTUP---系统启动方式,有3种选择:ram启动、rom启动、romram启动
cdl_component CYGPKG_REDBOOT_HAL_BOARD_OPTIONS ---定义内核ram启动的地址等
在ecos/packages/目录下在ecos.db是关于ECOS系统的一个数据库文件(在packages目录下),它包含了硬
件包管理工具和一些在组件配置库中的包,只有在ecos.db中登记了的包,才能被ECOS的库编译工具(configtool)选中和使用
硬件平台层的一些重要文件:
vectors.S---在target.ld中描述的入口软件,定义了reset_vector、start等各种启动标号
hal_platform_setup.h ——平台启动代码。
本文件主要用ARM汇编指令编写,实现平台上电后程序的启动和执行。
plf_io.h ---IO口名称,麻烦事儿
hal_platform_ints.h 中断配置,中断在寄存器中
pkgconf/ ------- 6个存储空间配置文件
hal_diag.c redboot用这些函数和GDB通讯
hal_diag.h 串口打印相关
hal_platform_ints.h 中断配置
......
启动的大概流程:
vectors.S --> reset_vector处开始执行,调用hal_platform_ints.h定义的platform_setup宏来进行一系列的初始化工作,vectors.S里面有LED空宏,我们可以修改来实现启动状态的指示,初始化完后会调用main.c --> cyg_start这时候会显示一些信息。
redboot/ecos中没有main函数,C语言入口是从cyg_start开始的
flash分区表的问题:
在redboot中flash分区表是通过fis函数族来实现的,它是建立在MTD驱动之上,引导文件系统的时候要指定文件系统镜像文件所在的BLOCK位置,一般是放在mtdblock2上,在redboot跑起来后,运行fis -list 就可以显示flash分区表的信息。
linux下可以自动识别redboot下的flash分区,以块设备的形式在dev目录下表现出来,这是redboot对比Uboot的其中一个很大的区别。