栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

ARM Porting

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

ARM Porting

一. 什么叫移植

	shell 框架 ---->  x6818 (s5p6818)
					----> mmmm (s5p6818)
					
	根据硬件平台的差异,将代码进行少量的修改
	就能使得该代码在目标平台上正常运行起来,该过程称作移植

二. 移植内容:

 2.1 移植uboot 
 		uboot 属于bootloader 的一种
 		它是硬件上电执行的第一个代码  类似于PC机上的BIOS
 		它负责为操作系统启动初始化硬件
 			负责加载操作系统 启动操作系统
 			
 2.2 移植linux内核
 		linux内核的核心功能:
 			1) 进程的管理
 			2) 进行间通信
 			3) 虚拟文件子系统
 			4) 内存管理
 			5) 网络子系统
 		谈谈板子上不上操作系统的优劣:
 			优点: 可以更容易的实现更加复杂的业务逻辑
 			缺点: 硬件成本高.
 		
 2.3 制作根文件系统
 	1号进程对应的程序
 	ls rm touch cd ...
 	通过移植busybox 实现以上命令

三. 目标

1 ) 熟悉uboot 源码 掌握编译方式
2 ) 熟悉linux内核框架结构
	掌握内核的裁剪配置方式
	掌握内核的编译过程
3 ) 掌握根文件系统镜像的制作方式

四. 开发板的烧写实验

4.0 擦除emmc 并分区 

	mmc erase 0 100000
	fdisk 2 3 0x100000:0x4000000 0x4100000:0x2f200000 0x33300000:0 
	注:  2 ---> 第二个设备
 		3 ---> 分区个数
 	 	剩余: 各分区的起始地址 + 分区长度
 	 
4.1 烧写uboot
	cp /mnt/hgfs/porting/env/uboot.bin  /tftpboot 
	tftp 48000000 uboot.bin 
	update_mmc 2 2ndboot 48000000 200 下载的字节数(上面提示多少就是多少555f0)
	烧写完成后重启开发板
	重新设置ip 
	setenv ipaddr 192.168.1.6
	saveenv 
	setenv serverip 192.168.1.8
	saveenv
	
4.2 烧写linux内核
	cp /mnt/hgfs/proting/env/uImage /tftpboot/
	tftp 48000000 uImage
	mmc write 0x48000000 0x800 0x3000 
		0x800: 要写入的偏移位置 单位扇区
		0x3000: 要连续写入的扇区个数 > 下载的字节个数 / 512
	重启之后报错:
	ERROR: can't get kernel image!
	setenv bootcmd mmc read 48000000 800 3000 ;   bootm 48000000
	saveenv
		mmc read 48000000 800 3000:
		从emmc 偏移0x800扇区位置开始连续读取
		0x3000个扇区内容到内存0x48000000开始的位置
		bootm 48000000
		启动操作系统
	重启开发板:
	Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
	原因是没有挂载根文件系统
	
4.3 烧写根文件系统镜像
	rootfs_ext4.img 
	cp   /mnt/hgfs/proting/env/rootfs_ext4.img  /tftpboot/
	tftp 48000000  rootfs_ext4.img
	mmc write 0x48000000 20800 32000
	setenv bootargs root=/dev/mmcblk0p2 rootfstype=etx4 console=ttySAC0 
										maxcpus=1  lcd=wy070ml tp=gslx680 
	注: root=/dev/mmcblk0p2,指定根文件系统所在的分区 
		 rootfstype,文件系统的类型
		 console,控制台
		 		ttySAC0, uart0控制器
		 maxcpus=1,只启动cpu0
		 lcd, LCD屏的类型
		 tp,触摸屏的类型 			
	也支持加载网络根文件系统: setenv bootargs root=/dev/nfs nfsroot=serverip:路径 ...
	saveenv
	重启开发板
	用户名: root 
	密码: 123456

五 编写UC程序在开发板上执行

上位机:
	mkdir porting 
	cd porting 
	vim helloworld.c 
	arm-coretex_a9-linux-gnueabi-gcc helloworld.c 
	cp a.out /tftpboot
下位机:
	tftp  -g -r a.out 192.168.1.8    -g: Get File  -r: FILE Remote file 
	发现下载不下来
	在内核下配置IP地址:
	ifconfig eth0 192.168.1.6
	ping 192.168.1.8 
	再次执行 tftp  -g -r a.out 192.168.1.8
	发现执行不了, ls a.out -l 
	chmod +x a.out 
	./a.out

1.Uboot 的基本概念

	通用的bootloader 		
	bootloader 的作用就是初始化硬件
						加载启动操作系统
	bootloader 不属于操作系统内核,这一部分不具有可移植性.
	通用的含义:
		1) 支持多种cpu架构: powerpc arm x86 ...
		2) 可以加载启动多种操作系统: linux vxworks (实时性非常强) QNX (实时操作系统) ...
			怎么理解实时性: 对于linux来说,有点吃大锅饭的意思,所有的进程都有得到执行的机会
						  vxworks 是丛林法则,高优先级的任务不执行完,低优先级的没有机会执行.

2.Uboot 源码的获取

	1) U-Boot 官网: http://www.denx.de/wiki/U-Boot/SourceCode
	   U-Boot 源码的获取: https://source.denx.de/u-boot/u-boot#
	  (墙裂不推荐)
	  
	2) 去拿demo 板中的uboot源码
	   uboot.tar.bz2
	   
	3) 编译uboot源码
	   cd porting  
	   cp /mnt/hgfs/proting/env/uboot.tar.bz2  /tftpboot/
	   tar xf uboot.tar.bz2
	   cd uboot
	   make x6818_config  @选出和具体的芯片相关的代码 选出和x6818 硬件相关的代码,
	   参与后续编译
	   make 
	   验证自行编译生成的ubootpak.bin 是否有效
	   
	4) 阅读uboot源码:
		从README开始
		find ./ type f | wc  ---> 发现有4002个文件
		开源程序: 1) 编译时如果有警告,忽略
				 2 ) 从README / INSTALL 入手
		uboot 代码结构 (s5p6818相关的):

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/751439.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号