Intel Canmore嵌入式平台可以基于多种方式启动。
先介绍背景知识。
Intel CE3110 启动时,首先去执行Non flash上的一个称为CEFDK的程序。CEFDK做最初的初始化动作。然后将执行权交给redboot. redboot则将kernel和rootfs准备好并将执行权交给redboot.
CEFDK, redboot, kernel, rootfs放在不同的位置上,所以Canmore可以有多种启动方式。
方式1:CEFDK, redboot,kernel,rootfs全部放入Non flash.这个方式有个前提, 因为Non flash非常小。 所以 kernel,rootfs必须非常基础,非常小的。其实做不了什么事。基本很少使用这种方式。
方式2:CEFDK,redboot放在Non flash. Kernel放在tftp根目录。rootfs放在nfs目录。这种方式常用来在开发阶段使用。因为kernel,rootfs可以很容易的修改。
方式3:CEFDK,redboot放在Non flash中,Kernel, rootfs放在SATA harddisk中。这种方式是STB最终产品模式。
现在具体介绍不同方式的做法:
CEFDK在Canmore出厂时,就已经烧入到Non Flash中。所以需要做的就是把redboot, kernel,rootfs放到相应的位置。
方式2:CEFDK,redboot放在Non flash. Kernel放在tftp根目录。rootfs放在nfs目录。1.首先烧入redboot.重新启动Canmore时,按住空格键,则进入CEFDK界面:
shell>
shell> ymodem 0x200000 0
在Transfer->send File 中选择ymodem. 并把
redboot_flashboot.bin选中。
传输完成后,只是将image放到内存.还需要烧到Non flash中去。
shell>expflash burnFlash 0x200000 0x100000 0x20000
注:redboot_flashboot.bin表示是:这个版本的redboot是放在Non flash中的。
重新启动Canmore,按ctrl+c.则进入redboot界面:
RedBoot>
2.将kernel放到tftpboot中,将rootfs放到NFS目录中。将kernel文件,bzImage放到server的/tftpboot中。(tftp要安装好)
将rootfs目录--fsroot放到NFS允许使用的目录中。(nfs服务要安装好 /etc/exports要允许Canmore IP地址使用这个目录)
3.在redboot中,设置kernel,rootfs的放置地点。RedBoot> fconfig
>> load -v -r -m tftp -h 172.16.1.61 -b 0x200000 bzImage
>>
exec -b 0x200000 -l 0x300000 -c "console=ttyS0,115200 root=/dev/nfs rw
nfsroot=172.16.1.61:/home/sam/Intel/Canmore/fsroot_canmore_1073_new
ip=dhcp mem=exactmap
memmap=640k@0 memmap=95M@1M"
>>
Boot
script timeout (1000ms resolution): 2Use BOOTP for network
configuration: trueDefault server IP address: 172.16.1.70Console baud
rate: 115200GDB connection port: 9000Force console for special debug
messages: falseNetwork debug at boot time: falseUpdate RedBoot
non-volatile configuration - continue (y/n)? y
之后重新启动,则redboot从172.16.1.61的tftpboot中拿kernel.
把172.16.1.61:/home/sam/Intel/Canmore/fsroot_canmore_1073_new 当作rootfs.
方式3: CEFDK,redboot放在Non flash中,Kernel, rootfs放在SATA harddisk中。3.1.准备SATA harddisk.3.1.1分区:将SATA硬盘连接到开发机Linux上 ,而不是Canmore Linux上。
#fdisk -l注意:/dev/sdb是4G固态硬盘。/dev/sda是Sam插入的40G SATA硬盘。Sam想把SATA硬盘分2个区。第一个区用来放置redboot.第二个分区用来放kernel+rootfs.注意:#fdisk /dev/sdaCommand (m for help): n
Command action e extended p primary partition (1-4)p
Partition number (1-4): 1
First cylinder (1-1022, default 1): Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-1022, default 1022): 1
Command (m for help): n
Command action e extended p primary partition (1-4)p
Partition number (1-4): 2
First cylinder (2-1022, default 2): Using default value 2
Last cylinder or +size or +sizeM or +sizeK (2-1022, default 1022): +1024M
Command (m for help): a
Partition number (1-4): 1
Command (m for help): w
The partition table has been altered!
n:新建partition.
p:逻辑分区
1,2:分区号。
First cylinder :第一个扇区号
Last cylinder or +size or +sizeM or +sizeK :最后一个扇区号.或者用+xxxM.
a: 制定boot flag.
w:执行以上动作。
3.1.2格式化/dev/sda2#mkfs.ext3 /dev/sda23.2:放置redboot.bin到第一个分区。首先使用tftpboot+nfs方式启动。# dd conv=sync if=redboot.bin of=/dev/sda1 [注1]
224+1 records in225+0 records out3.3:放置kernel+rootfs到第二个分区。# mkdir disk
# mount /dev/sda2 /disk/
#cp bzImage /disk
#cd fsroot
# cp * -rf /disk/
3.4:设置redboot:(Sam认为应该是Non Flash中的redboot)先查看当前Redboot设置。Redboot> fconfig -l 写Redboot:Redboot> fconfig>> load -v -r -m disk -b 0x200000 hda2:bzImage
>> exec -b 0x200000 -l 0x300000 -c "console=ttyS0,115200 root=/dev/sda2 rw mem=exactmap
memmap=640K@0 memmap=95M@1M"
>>
重新启动。OK
大Memory设置:在PR7之后的版本中,Canmore可以通过一系列设置,将用户空间大小提升到194M。
可以如下操作:
1.修改config文件:
#emacs /etc/platform_config/platform_config.hcfg
修改以下句子
media_base_address = 0x0C300000 /*0x10000000 sam Modify it*/
2. boot时修改redboot传入的参数:
load
-v -r -m tftp -h 172.16.1.61 -b 0x200000 bzImage_canmore_1087exec -b
0x200000 -l 0x300000 -c "console=ttyS0,115200 root=/dev/nfs rw
nfsroot=172.16.1.61:/home/sam/Intel/Canmore/TEST_TEAM_FSROOT/image4/fsroot_canmore_1087
ip=172.16.1.41 mem=exactmap
memmap=640k@0 memmap=194M@1M"
之前是:
memmap=95M@1M 表明从1M处到95M处。新写法表明从1M处到194M处。
注1:
Linux命令dd:
dd: convert and copy a file.转换和copy 文件。
conv= : convert the file as per the comma separated symbol list. 将文件转化为指定的格式
其中:conv = sync:把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。
if=:read from FILE instead of stdin。输入
of=:write to FILE instead of stdout。输出
# dd conv=sync if=redboot.bin of=/dev/sda1
所以,这句话:将redboot.bin放入/dev/sda1
阅读(1299) | 评论(0) | 转发(0) |