系统移植——开发/产品 系统部署

【开发阶段产品部署】:

启动流程:

  1. 启动uboot进入uboot的交互界面

    u-boot的移植方式:
    1.	通过ubuntu系统烧写ubootpak.bin到SD卡中。
    		使用工具:sdtool
    	1. 拷贝sdtool工具到ubuntu中,并切换到sdtool目录下
    		
    	2. 将SD卡插到PC上,并让ubuntu识别SD卡。
    		要求:
    			1. 必须使用SD卡读卡器,不可以使用电脑自带的SD卡卡槽;
    			2. SD卡被ubuntu识别之前,先在windows下对SD卡进行格式化。
    		ubuntu识别SD卡步骤:
    			1. 虚拟机 --> 可移动设备 --> 读卡器的名字 --> 连接
    			2. 读卡器或者电脑是USB3.0的接口:
    					虚拟机 --> 设置 --> USB控制器 --> USB兼容性: --> USB3.0
    	3. 进入到sdtool目录下:
    			xxxxxxx-sdmmc.sh:烧写ubootpak.bin到SD卡中的脚本文件
    			ubootpak.bin:u-boot的镜像
    	4. 烧写ubootpak.bin文件到SD卡中 :
    			在ubuntu的终端中执行以下命令 :
    				sudo ./s5p6818-sdmmc.sh /dev/sdb ubootpak.bin 
    				/dev/sdb : SD卡在dev目录下的设备文件
    				
    				执行以上命令出现以下内容,表示制作成功:
    					669+1 records in
    					670+0 records out
    					343040 bytes (343 kB) copied, 0.00605781 s, 56.6 MB/s
    					^_^ The image is fused successfully
    	5. 测试SD卡是否成功烧写uboot的镜像
    
    2.	通过windows系统烧写xin_ubootpak.bin到SD卡中
    		使用windows下的工具: Win32DiskImager.exe
    	
    	1. 首先得到windows版本的ubootpak.bin :
    			在ubuntu版本的ubootpak.bin文件前边添加512字节的占位,跳过SD的前边512字节的分区表。
    
    				dd if=/dev/zero of=512B bs=512 count=1
    				chmod 777 512B 
    				cat 512B ubootpak.bin > win_ubootpak.bin
    
    				拷贝win_ubootpak.bin到windows文件夹中
    
    	2. 将SD卡插到PC上,可以使用PC自带的SD卡卡槽
    			打开Win32DiskImager.exe,选择SD卡的盘符,选择要写到SD卡中的win_ubootpak.bin文件,单击write,就可以写入到SD卡中。
    
    	3. 测试SD卡是否制作成功。
    
    3. 烧写ubootpak.bin到EMMC(flash)中
    			前提:SD卡启动盘必须制作好,前边已经完成。
    			思路:ubootpak.bin烧写到EMMC中的思路.png
    			
    		1. 通过SD卡的方式启动uboot,并进入uboot的交互界面。 
    		2. 使用tftp命令将ubootpak.bin文件烧写到内存中
    				1. 先将ubootpak.bin拷贝到tftpboot目录下:
    							cp ubootpak.bin ~/tftpboot/
    				2. 将ubootpak.bin烧写到内存的0x41000000地址中:
    							tftp 0x41000000 ubootpak.bin 
    				
    		3. 将内存中的ubootpak.bin使用update_mmc命令烧写到EMMC中
    		4. 测试是否烧写成功
    

ubootpak.bin烧写到EMMC中的思路
-sdmmc.sh 脚本文件解析

				sudo ./s5p6818-sdmmc.sh /dev/sdb ubootpak.bin
				s5p6818-sdmmc.sh脚本文件分析:
				dd if="${xboot}" of="${dev}" bs=512 seek=1 conv=sync 
				dd:数据烧写命令
				xboot=ubootpak.bin 
				dev=/dev/sdb
				if:输入文件 (input file)
				of:输出文件 (output file)
				bs:大写是512字节
				seek:偏移seek*bs大小空间
				conv=sync:同步

update_mmc命令解析

				update_mmc <dev no> <type> <mem> <addr> <length>
				- type :  2ndboot | boot | raw | part
				<dev no>:设备号  EMMC设备号为:2
				<type>:类型 2ndboot 
				<mem>:从内存的哪个地址开始进行数据搬移
				<addr>:搬移到EMMC的起始地址,以字节为单位
				<length>:搬移数据的长度,以字节为单位 :具体长度要看ubootpak.bin大小
				
				pri打印环境变量有以下信息:
				flash=mmc,2:ubootpak:2nd:0x200,0x78000;
				flash=mmc,2:2ndboot:2nd:0x200,0x4000;
											
				update_mmc 2 2ndboot 0x41000000 0x200 0x78000
  1. 下载内核镜像 uImage 到内存中

    1. 将 uImage 镜像文件拷贝到 tftpboot 目录下
    2. tftp 0x48000000 uImage (下载内核镜像到开发板中)
    
  2. 设置自启动参数bootargs

    u-boot环境变量中的bootargs变量是一个自启动参数,linux内核启动时,会uboot环境变量的分区读取bootargs变量的值。
    32位ubuntu:
    setenv bootarges root=/dev/nfs nfsroot=1992.168.x.xxx:/home/xxxx/nfs/rootfs rw console=/ttySAC0 init=/linuxrc ip=192.168.x.xxx
    
  3. 启动linux内核 (bootm 0x4800000)

  4. 总结:根文件系统挂载不成功的原因

     1. 检查nfs安装和配置是否正确
     2. 重启nfs服务
     	sudo service nfs-kernel-server restart
     3. 检查bootargs参数设置是否正确 
    
  5. 设置开发板上电之后系统自动启动。

    设置uboot中bootcmd自启动的命令。
    	# setenv bootcmd tftp 48000000 uImage\;bootm 48000000
    	# saveenv 
    

.

产品阶段系统部署

相关命令:uboot中mmc命令的使用
		1. mmc info - display info of the current MMC device
			查看当前mmc设备的信息
		2. mmc read addr blk# cnt
			作用		:		从MMC中读数据到内存中
			addr		:		内存的起始地址 
			blk#		:		MMC块设备的编号,一块是512字节
			cnt			:		个数
			从MMC的起始块号为blk的位置读数据到内存的addr为起始地址处,读cnt块数据的大小
		3. mmc write addr blk# cnt
			作用		:		从内存中写数据到MMC中
			addr		:		内存的起始地址 
			blk#		:		MMC块设备的编号,一块是512字节
			cnt			:		个数
			从内存的addr为起始地址写数据到MMC的blk块号处,写数据的大小位cnt块。
		4. mmc erase blk# cnt
			作用		:		擦除MMC中的数据
			blk#		:		MMC块设备的编号,一块是512字节
			cnt			:		个数
			从MMC的blk处开始擦除数据,擦除数据的大小是cnt块。

流程:

  1. 将uboot镜像烧写到EMMC中(uboot烧写阶段已经完成)

     参考u-boot移植第三种方法;update_mmc命令 
    
  2. 将内核镜像uImage烧写到EMMC中

     tftp 0x41000000 uImage 
     参考 mmc write 命令;
     mmc write 0x48000000 0x800 0x4000
    
  3. 将根文件系统镜像ramdisk.img烧写到EMMC中

     tftp 0x41000000 ramdisk.img 
     mmc write 0x49000000 0x20800 0x20800
    
  4. 设置uboot的启动参数

     bootcmd  bootargs
    
setenv bootcmd mmc read 0x48000000 0x800 0x4000\;mmc read 0x49000000 0x20800 0x20800\;bootm 0x48000000 0x49000000
setenv bootargs root=/dev/ram rw initrd=0x49000040,0x1000000 rootfstype=ext4 init=/linuxrc console=ttySAC0,115200
saveenv

解析:
	root=/dev/ram :从内存中挂载根文件系统	rw :对根文件系统具有读写的权限
	initrd=0x49000040,0x1000000	挂载根文件系统的起始地址和大小;跳过根文件系统的64字节的头部信息。
	rootfstype=ext4 :根文件系统的类型
	init=/linuxrc 
	console=ttySAC0,115200
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值