开发板操作系统三个阶段的部署(部署uboot,开发阶段部署,产品发布阶段部署)

目录

部署uboot

1. 将uboot的脚本烧写到uboot上;

2. 将uboot放到flash(EMMC)中;

开发阶段系统部署

产品发布阶段系统部署

了解一些命令

部署流程

开发板挂载时一直循环挂载的解决方法


本次教程使用的是S5FS6818开发板;

在虚拟机中配置好tftp和nfs后,才可进行本教程操作;

    tftp的文件夹中,需要包含至少三个文件:根文件系统镜像ramdisk.img;ubootpak.bin;内核镜像uImage;

tftp命令:

1. sudo service tftpd-hpa start 启动TFTP服务

2. sudo service tftpd-hpa restart 重启TFTP服务

    nfs的文件夹中至少包含“根文件系统rootfs”文件夹;

nfs命令:

1. sudo service nfs-kernel-server start 启动nfs服务

2. sudo service nfs-kernel-server restart 重启nfs服务

部署uboot

1. 将uboot的脚本烧写到uboot上;

        a. 将sd卡启动盘的制作工具“sdtool”拷贝到虚拟机中新建的“toolchain”目录下;

        b. 解压后进入sdtool目录下,并使用读卡器将sd卡连接到电脑,在windows下格式化sd卡;

        c. sdtool中的文件一般是

                i. xxxx-sdmmc.sh:烧写uboot到sd卡的脚本

                ii. ubootpak,bin:uboot的可执行文件

        d. 烧写ubootpak,bin到sd卡中

        e. 在虚拟机中执行“sudo ./xxxx-sdmmc.sh /dev/sdb ubootpak.bin”

        f. 打印如下信息,表示部署成功

                “688+1 records in

                689+0 records out

                352768 bytes (353 kB) copied, 0.00914641 s, 38.6 MB/s

                ^_^ The image is fused successfully”

        g. 测试sd卡是否制作成功

                将sd卡插入开发板,设置开发板的拨码开关为sd卡启动

        h. 开发板重新上电,进入FS6818#界面显示sd卡启动成功

2. 将uboot放到flash(EMMC)中;

        a. 前提是sd卡中已经烧录了一个uboot;

       b.  通过sd卡方式启动进入uboot,进入FS6818#界面;

        c. 拷贝ubootpak.bin到tftpboot目录下;

        d. 将ubootpak.bin使用tftp命令烧写到内存中;(需要连接网线,在开发板上运行)

tftp 0x41000000 ubootpak.bin

0x41000000只是内存的一个地址,换成0x42000000也一样

        e. 执行命令将ubootpak.bin下载到开发板的flash中;

update_mmc 2 2ndboot 0x41000000 0x200 0x78000

update_mmc <dev no> <type> <mem> <addr> <length>

<dev no>:flash设备编号 EMMC:2

<type>:类型 2ndboot --- type : 2ndboot | boot | raw | part

<mem>:uboot在内存中的起始地址,以字节为单位

<addr>:flash的起始地址:以块为单位

<length>:往flash中下载多少块空间

打印以下内容表示成功

"head boot dev = 2

update mmc.2 type 2ndboot = 0x200(0x1) ~ 0x78000(0x3c0): Done"

开发阶段系统部署

1. 将内核镜像uImage放到虚拟机的tftpboot目录下;

2. 使用tftpboot命令将uImage下载到开发板的指定地址(如0x43000000)

tftp 0x43000000 uImage

3. 设置uboot的自动参数bootargs; 因为启动linux内核时,uboot会将bootargs后的参数传递给内核,内核根据这些参数来设置ip等信息; 通过‘pri’命令可以在“超级终端”查看bootargs的参数;

bootargs=root=/dev/nfs nfsroot=192.168.2.97:/home/ben/nfs/rootfs rw 
console=ttySAC0,115200 init=/linuxrc ip=192.168.2.100

使用“setenv bootargs=root=……”可以修改bootargs的参数;

参数:

        a. root=/dev/nfs:根文件系统类型

        b. nfsroot=192.168.2.97:/home/ben/nfs/rootfs:根文件系统的ip和路径

        c. rw:根文件系统的可读可写的权限;

        d. console=ttySAC0,115200:使用串口0实现内核和PC的数据交互;

        e. init=/linuxrc:启动内核后,运行一号进程;

        f. ip=192.168.2.100:开发板的ip地址

4. 修改完bootargs的参数后,使用 ‘saveenv’ 保存修改;

5. 使用bootm命令启动内核;

bootm 0x43000000

6. 设置uboot为自启动,即需要设置bootcmd--环境变量,也就是将第3,第5步用一句话执行;

bootcmd=tftp 0x43000000 uImage;bootm 0x43000000

7. 然后给开发板重新上电,倒计时时不要进行任何操作,等待加载完之后,出现与终端类似的界面后,则部署成功;

产品发布阶段系统部署

了解一些命令

1. 通过uboot命令‘mmc’来查看当前硬盘的详细信息;

mmc info

2. 通过命令 ‘mmc read’ 可以向硬盘中写内容,通过命令 ‘mmc write’ 可以读取硬盘的内容到内存中;

mmc read addr blk# cnt
	1.addr:对应着内存的地址
	2.blk#:要读取的硬盘的起始地址
	3.cnt:要读取的数据大小
	含义:在mmc的blk*512地址处,读取cnt大小的数据到内存的addr地址中

mmc write addr blk# cnt
	1.addr:对应着内存的地址
	2.blk#:要写入的硬盘的起始地址
	3.cnt:要写入的数据大小
	含义:把在内存中起始地址为addr处的内容写到硬盘中,以blk#*512为起始块,
写入cnt块大小的数据,

mmc erase blk# cnt
	1.blk#:mmc设备的起始块号
	2.cnt:要擦除的mmc设备块的个数
	含义:将mmc的起始块号为blk#,共cnt块大小的数据,进行擦除。
擦除的时间,受cnt块的个数有影响,

部署流程

1. 使用tftpboot命令将uImage下载到内存指定地址;

tftp 0x41000000 uImage

通过下载完自动输出的信息中的“Byte transferred = ”可以得知下载内容的大小,除以512后转化为十六进制可得需要写入多少块;

2. 将内存中下载的内核镜像搬移到mmc中;

mmc write 0x41000000 0x800 0x4000

3. 使用tftpboot命令将ramdisk.img下载到内存指定地址;

tftp 0x41000000 ramdisk.img

4. 将内存中的根文件系统镜像搬移到硬盘中;

mmc write 0x41000000 0x20800 0x20800

5. 设置bootcmd参数,从硬盘中启动系统;

setenv bootcmd mmc read 0x41000000 0x800 0x4000\;
mmc read 0x42000000 0x20800 0x20800\;bootm 0x41000000 0x42000000

6. 设置自启动参数;

setenv bootargs root=/dev/ram rw initrd=0x42000040,0x1000000 
rootfstype=ext4 init=/linuxrc console=ttySAC0,115200

root=/dev/ram:从ram(内存)中挂载根文件系统

initrd=0x42000040 0x1000000 :

根文件系统的入口地址,省略前边64字节头

根文件系统的大小0x1000000

rootfstype=ext4:根文件系统的类型

7. 使用 ‘saveenv’保存修改;

8. 重新上电,此时开发板可以不连接网线,倒计时时不要进行任何操作,等待加载完之后,出现与终端类似的界面后,则部署成功;

开发板挂载时一直循环挂载的解决方法

解决方法:

  1. 重启nfs;
  2. 还原nfs中的rootfs,也就是重新解压rootfs;

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值