系统移植基础知识

嵌入式系统:

以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于对功能、可靠性、成本、体积、功耗
有严格要求的专用计算机系统。
//专用的计算机系统,特点:软硬件可裁剪

嵌入式系统 = 软件系统 + 硬件系统
嵌入式软件系统
分类:带操作系统与不带操作系统

常见的嵌入式系统
安卓系统,linux系统,ios系统,vxworks,ucos

linux系统移植要点

搭建开发环境
bootload的选择和移植
kernel的配置、编译、移植
根文件系统的制作

工具集

gcc 编译器
arm-linux-gcc 交叉编译器
readelf 查看elf文件格式信息
file 查看文件类型
size 查看文件段大小
nm 查看符号表
strip 丢弃目标文件中的全部和特定符号,减小文件体积
strings 输出文件中可打印的字符串
objdump 反汇编
	objdump 文件名 -sl > 目标文件
addr2line 地址转换出对应的行号

启动流程

上电-->uboot->kernel-->rootfs

Bootloader

Bootloader是硬件启动的引导程序是运行操作系统的前提;
在操作系统内核或用户应用程序运行之前运行的、小代码段。
对软硬件进行相应初始化和设定,为最终运行操作系统准备环境等
在嵌入式系统中,整个系统的启动加载任务通常由Bootloader来完成
Bootloader不属于操作系统,一般采用汇编语言和C语言开发。需要针对特定的硬件平台编写。

uboot

1.获取源码、编译环境
2.搭建好交叉编译环境
3.uboot是否支持板子的芯片(arch/$ARCH/cpu/cpu_type)
	不支持解决思路:寻找新的uboot、找芯片厂家提供
4.uboot是否支持板子的外设(board/)
	不支持解决思路:寻找新的uboot、找板子厂家提供(找相同芯片的板子)
5.编译
	借鉴origen --> fs4412 源码+头文件
	配置项添加
	编译环境的设置 X86  ----> 修改Makefile   编译项----> arm-linux-
	make distclean 防止前面其他板子的配置项干扰
	make fs4412_config
	make ----> u-boot.bin
6.烧写
	公司提供的烧写方式
7.验证
	看现象 思考 修改

	现象:uboot烧写后,没有任何反应
	思考:uboot是否为第一个程序 / 程序运行了一部分,就结束了 / 程序没有运行 / 硬件出问题了
	没有运行-->cpu-->芯片手册寻找其启动流程-->
					iRom-->bl1-->bl2--uboot
					|   soc    |       emmc         |
	解决:bl1+bl2+uboot-->u.bin

	
	现象:灯亮了,灭了,循环
	思考:亮-->程序开始-->灭-->板子复位
	          程序异常-->复位信号-->电源模块-->板子复位(寻找哪里出问题)
	          | 没问题 |	              |  MRB high reset 不产生|

	
	现象:灯常亮,交互界面没反应
	思考:板子不复位, 界面<-->串口<-->板子
				|-->驱动init
					|-->驱动里面有第三方的参数

	现象:界面有显示,tftp、ping无法使用
	思考:程序没有命令-->猜测有-->commom找命令 cmd_*.c-->cmd_net.c-->ping有-->有宏开关
	解决:把宏开关打开-->借鉴,看别人如何解决-->板子头文件声明打开

	现象:命令有了 ping,但是卡住了
	思考:			|-->阻塞(等待资源等待不到)
					|-->网络设备
					         |-->驱动没有调用
	解决:借鉴别人

	现象:ping能执行,但50000000有问题
	思考:50000000-->sromc-->借鉴sromc init
	现象:ping tftp都能使用,下载kernel,bootm启动

内核(kernel)

uImage(内核:源码)
xxx.dtb(设备树:配置)
内核:操作系统内部核心(设备管理、电源管理、进程管理、驱动、文件系统等)
完整的操作系统:人机交互的界面(命令行、图形界面)
	lib(应用需要的库)
	文件(根目录、配置文件等)
设备:板子厂家提供(设备相关->配置   设备驱动-->源码)

1.获取源码 kernel
2.支持芯片(arch/$ARCH/configs)
	不支持:高版本 找厂家
3.支持板子(arch/$ARCH/boot/dts)
	不支持:高版本 找厂家 找相同芯片的板子借鉴

内核移植流程

1.获取源码、交叉编译环境
2.uImage编译
	2.1确认芯片是否适配 arch/$ARCH/configs/  exynos_defconfig
	2.2Makefile --> ARCH=arm CROSS_COMPILE=arm-linux-
	2.3make exynos_defconfig //修改默认配置为芯片所匹配的 覆盖.config
	2.4make menuconfig //功能的增加、删减
	2.5make uImage --> uImage
3.dtb编译
	3.1确认板子是否匹配 arch/$ARCH/boot/dts/
	3.2 cp exynos4412_origen.dts  exynos4412_fs4412.dts
	3.3Makefile --> origen.dtb --> fs4412.dtb
	3.3make dtbs -->exynos4412_fs4412.dtb
4.验证
	uboot --> kernel
	现象:正常运行,但网络设备找不到
	思考:设备没有-->去设备树找网络设备是否有
			|-->没有-->借鉴有的

	现象:网络还是没有
	思考:系统还是不认识设备
		|-->驱动是否存在-->驱动没有-->make menuconfig 增加

网络文件系统 nfs

nfs server 设置
1.安装sudo apt-get install nfs-kernel-server
2.准备目录:在家目录下,任意目录里面,解压 rootfs.tgz -->记录rootfs目录
3.配置nfs sudo vi /etc/exports -->rootfs 目录 *(rw,sync,no_subtree_check,no_root_squash)
4.重启 sudo /etc/init.d/nfs-kernel-server restart

uboot 配置
set bootargs root=/dev/nfs nfsroot=192.168.9.14:/home/hqyj/zz/rootfs/rootfs,v3 rw console=ttySAC2,115200 clk_ignore_unused init=/linuxrc ip=192.168.9.15
tftp 41000000 uImage;tftp 42000000 exynos4412-fs4412.dtb;bootm 41000000 - 42000000
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值