首页 > 其他 > 详细

项目的部署--系统移植

时间:2021-06-05 01:22:42      阅读:18      评论:0      收藏:0      [点我收藏+]

一. 通过tftp与nfs挂载

此方法常用与开发阶段,系统移植和驱动开发通常使用此种方式。对于uboot中bootcmd和bootargs的环境变量的设置

NFS的方式挂载根文件系统

setenv bootargs  root=/dev/nfs nfsroot=192.168.3.222:/home/linux/nfs/rootfs rw console=ttySAC0,115200 init=/linuxrc ip=192.168.3.250

setenv bootcmd tftp 0x48000000 uImage\;bootm 0x48000000

saveenv

二、本地挂载

uboot uImage ramdisk.img文件都写到EMMC中,然后从内存(ram)中挂载根文件系统

1》 对EMMC进行分区操作
	0-----512byte-------1M----------20M-----------532M------------剩余
	   保留         uboot      kernel     ramdisk.img     userData
  字节单位0-----0x200------0x100000-----0x1400000------0x21400000 -----剩余 
  块为单位0-----0x1--------0x800--------0xa000---------0x10a000---------剩余
		   mmcblkboot0   mmcblk0p1    mmcblk0p2      mmcblk0p3 
		     已经完成        自己分区    自己分区        自己分区
启动uboot进入uboot交互界面,对uboot中fdisk命令,
		对EMMC进行分区操作 : 
		
	fdisk 2 3 0x100000:0x1300000  0x1400000:0x20000000  0x21400000:0   
	分析 :
		‘2’:表示emmc的设备号
		‘3’:表示分三个个分区(uImage+ramdisk.img+userData)
		uboot分区不用做,默认已经设置好了
		起始地址   分区大小
		0x100000:0x1300000:第二个分区的起始地址和大小
		0x1400000:0x10000000:第三个分区的起始地址和大小
		0x21400000:0:第四个分区的起始地址和剩余的空间

2》生成uImage内核的镜像,并烧写到EMMC中
	需要配置内核:
	Device Drivers  ---> 
		[*] Block devices  --->  
			<*>   RAM block device support 
			(8192) Default RAM disk size (kbytes) 
			**需要与实际根文件系统大小匹配
			
	Boot options  ---> 配置内核的参数使用哪个
		Kernel command line type (Use bootloader kernel arguments if available)  --->
			//只使用uboot传递的参数
			(X) Use bootloader kernel arguments if available
			// 使用uboot传递的参数和内核中默认参数
			( ) Extend bootloader kernel arguments
			// 只使用内核自己的默认的参数
			( ) Always use the default kernel command string 
	
	重新编译内核,并且下载到EMMC中
	tftp 48000000 uImage 
	mmc write 48000000 0x800 0x4000
	
3》制作ext4类型的根文件系统,并烧写到emmc中 
	注意,ext4类型文件系统的大小,需要看roofs文件的大小
	使用以下命令可以查看文件的大小
	cd 到rootfs目录下,执行du -h命令,可知文件为17M
	这里也可以使用arm-none-linux-gnueabi-strip对库文件进行压缩。
	
	roofs-ok到ramdisk.img操作步骤 :
	
		cd ~/nfs/
		sudo dd if=/dev/zero of=ramdisk bs=1k count=8192
		命令解析:
		dd:用于创建一个单个镜像文件
		if=/dev/zero : 将来创建的单个镜像文件里面的内容全部来自设备/dev/zero
					/dev/zero设备能够源源不断产生0数据   
					if ====》input file
		of=ramdisk : 指定将来创建单个镜像文件名
					并且此文件里面填充全0  
					of ====》output file
		bs=1k : 生成的ramdisk以块为单位,一块1024字节
		count=8192 : 总共8192块
		结论:生成的ramdisk.img根文件系统的镜像大小位8MB
		
		sudo mkfs.ext4 -F ramdisk
		命令解析:
		// 格式化镜像文件ramdisk
		// 把ramdisk.img比作U盘
		// 指定的文件系统格式为ext4
		/类似windows下格式化U盘
		
		sudo mount -t ext4 -o loop ramdisk /mnt
		命令解析:
		挂接rootfs_ext4.img到目录/mnt,并且指定的文件系统类型ext4
		挂接命令的结果就是将来只需要访问/mnt,本质
		就是在访问ramdisk里面的内容
		
		sudo cp ~/nfs/rootfs/* /mnt/ -a    */
			//向/mnt目录拷贝rootfs-ok的内容,
			//本质上就是向ramdisk.img拷贝rootfs的内容
			//ramdisk.img里面的内容,就是我们通过网络挂载的根文件系统中的内容
		
		sudo umount /mnt //卸载/mnt/下挂载的ramdisk.img
		
		使用gzip工具对ramdisk镜像进行压缩
		gzip  --best  -c  ramdisk  >  ramdisk.gz
		
		使用mkimage工具为镜像文件添加校验头然后生成可用的镜像ramdisk.img
		mkimage -n "ramdisk" -A arm -O linux -T ramdisk -C gzip -d ramdisk.gz ramdisk.img
		
		将自己制作生成的根文件系统镜像拷贝到tftp的下载目录下并修改其权限
		cp ramdisk.img ~/tftpboot
		chmod 777 ~/tftpboot/ramdisk.img
****************************************************************************************************************
第二种方法:
	制作ext4类型的根文件系统,边烧写到emmc中 
	注意,ext4类型文件系统的大小,需要看roofs-ok文件的大小
	使用以下命令可以查看文件的大小
	cd 到rootfs目录下,执行du -h命令,可知文件为17M
	
	这里也可以使用arm-none-linux-gnueabi-strip对库文件进行压缩。
	
	roofs到rootfs.ext4操作步骤 :
		cd ~/nfs/
		
		sudo dd if=/dev/zero of=rootfs.ext4 bs=1k count=8192
		
		sudo mkfs.ext4 -F rootfs.ext4
		
		sudo mount -t ext4 -o loop rootfs.ext4 /mnt

		sudo cp ~/nfs/rootfs/* /mnt/ -a
*/		
		sudo umount /mnt 

		将自己制作生成的根文件系统镜像拷贝到tftp的下载目录下并修改其权限
		cp rootfs.ext4 ~/tftpboot
		chmod 777 ~/tftpboot/rootfs.ext4
		
****************************************************************************************************************
	
4》将ramdisk.img烧写到EMMC中
	tftp 48000000 ramdisk.img
	mmc write 48000000 0xa000 0x100000

5》修改bootcmd和bootargs 

	ram的方式挂载根文件系统
	setenv bootcmd mmc read 0x48000000 0x800 0x4000\;mmc read 0x49000000 0xa0000 0x80000\;bootm 0x48000000 0x49000000

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

	saveenv 
	
	
	EMMC的方式挂载跟文件系统
	setenv bootcmd mmc read 48000000 0x800  0x4000 \; bootm 48000000
	setenv bootargs root=/dev/mmcblk0p2 rw rootfstype=ext4 init=/linuxrc console=ttySAC0,115200 tp=gt818-linux  maxcpus=1
	saveenv
	
	tp=gt818-linux:对应触摸屏型号
	maxpus=1: 启动CPU0 

系统启动后:
	ls /dev/mmcblk0*
	cat /proc/partitions
	mkfs.vfat /dev/mmcblk0p3 
	mount /dev/mmcblk0p3 /mnt/   

项目的部署--系统移植

原文:https://www.cnblogs.com/yangtai/p/14851555.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!