大数据最全系统移植知识点总结_浅谈系统移植,三面腾讯已拿offer

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

vxworks:  硬实时系统	军工   汽车  	   $1
linux:	  软实时系统		民间    免费   服务器  嵌入式	 
window:   非实时系统		民间	收费   PC
其他: freeRTOS-stm32      51-osal    ucOS  xxx

RTOS: real time os 实时系统

简单了解一下系统移植

首先就是为什么我们要进行系统移植:
思考一个问题:新开发板子需要系统,但是没有系统. 系统从哪里来???
答案是:大多数芯片原厂都会提供,包括 系统、电路图 linux源码 u-boot源码 开发工具 等。

系统移植主要分为三个主要部分:

bootloader os fileSystem

举个例子:

PC: bios window fileSystem
手机: recovery andriod fileSystem
嵌入式: u-boot linux fileSystem

系统移植的过程:

1.使用大厂提供的 原始iso(uImage) run in my board .发现可以跑起来,但是可能有问题.

2.发现问题,找出原因: 比较两个板子差异.

3.根据原因 添加我们功能
比如 dm9000, 修改设备树 menuconfig添加驱动和其他功能

  1. 添加第三方驱动:比如摄像头 …
    1)方法一直接融入内核
    2)方法二 编译为模块
    5.自己写驱动

接下来了解一下系统移植的三个部分

bootloader

boot 启动,启动板子 loader加载os
目的: 加载并启动os.

bootloader其实 就一个 单片机程序,能够开机启动 最后加载os就行了.


工作过程:
汇编 : 开机启动 初始化核心硬件(cpu ram flash 串口) 初始化堆栈,跳转到C
C语言: 初始化大部分硬件(网卡 sd )从flash加载环境变量,初始化 [交互模式] 加载os,启动os


u-boot使用:
bootloader有很多款:
bios : 安装包 300M ,功能强大 PC
recovery: 安装包 5MB ,功能可以 手机
u-boot : 200KB ,功能够用 嵌入式

  u-boot: universal bootloader 通用的bootloader
  			可以跑在pc arm ppc mips .....

  	u-boot是依赖于硬件的, 硬件不同 你要使用专用的u-boot .
  	工作中我们很少去改动u-boot.  因为u-boot使用的硬件很少的.

两种方法:
命令:
printenv 打印环境变量
FS4412 # printenv
setenv 环境变量 值 修改内存中的环境变量
如果环境变量没有,则创建
如果值为空,则删除

  	saveenv					把内存中的环境变量存入flash
  	
  	tftp 文件传输命令		tftp服务器ip--环境变量serverip决定
  							板子ip---ipaddr决定
  			tftp  41000000  文件名
  	ping ipaddr
  	
  	go addr			: 去指定地址执行程序
  	bootm:		boot from memery,主要用来启动操作系统的 
  			bootm  os_addr     fs_addr  dtb_addr


环境变量: 它会影响uboot执行
baudrate=115200 串口波特率
bootargs=root=/dev/ram0 rw console=ttySAC2,115200 init=/linuxrc
linux启动 需要读取fs,那么他怎么知道fs在哪里(网上 sd 硬盘 u盘)…他其实不知道
你要告诉他 写入bootargs中,有固定的格式的.

  			set bootargs root=/dev/nfs nfsroot=192.168.3.196:/home/lsf/source/rootfs rw console=ttySAC2,115200 init=linuxrc ip=192.168.3.232
  					root=/dev/nfs::   rootfs根文件系统使用nfs,要去网络上挂载它
  					nfsroot=192.168.2.121:/home/lsf/source/rootfs rw   指定nfs的具体位置 和读写权限
  					console=ttySAC2,115200   告诉linux 你起来以后,记得使用串口2,波特率=..... 
  					init=linuxrc 
  					ip=192.168.2.245	告诉linux ,你起来以后 使用这个ip
  			   bootcmd=movi read kernel 41000000;movi read dtb 42000000;movi read rootfs 4300000 3f73a9;bootm 410000 
  		u-boot要去加载启动os,但是u-boot怎么知道 如何启动os???他不知道
  					你要告诉u-boot如何启动,如何告诉u-boot:  让bootcmd等于几条指令,这几条指令依次执行就可以启动os 
  				u-boot启动之后就会 读取bootcmd参数,然后依次执行.
  			  
  set bootcmd   tftp 41000000 uImage\;tftp 42000000 exynos4412-fs4412.dtb\;bootm 41000000 - 42000000 
  	bootdelay=3		启动延迟
  			ethact=dm9000	网卡dm9000
  			ethaddr=11:22:33:44:55:66	网卡物理地址
  			fileaddr=41000000
  			filesize=8636
  			gatewayip=192.168.3.1		网关地址
  			serverip=192.168.0.134 		tftp服务器ip
  			ipaddr=192.168.3.247		板子的ip
  			netmask=255.255.255.0		掩码
  			stderr=serial
  			stdin=serial
  			stdout=serial

u-boot源码

​ 解压源码,要在纯linux下 tar -xvf u-boot…
​ 顶层目录, u-boot第一级目录,以后 代码移植 编译都是在该目录下.

目录结构:
1.平台相关源码
cpu相关的代码 不同的cpu代码不一样,so 每款 arm系列 都有有自己的 代码 arch/arm/cpu/xxxxxx 4
板子相关的代码 不同的板子,代码不一样 board/samsung/origen
板子可以有不同配置 一个板子可以有多个配置文件 include/configs/origen.h 里面全是宏
2.平台无关的源码
比如 网络协议 命令 驱动 等等都是 无关cpu 板子 配置的.

编译: 要在顶层目录下
1.配置u-boot: 告诉u-boot你要编译那一款板子(origen)的
make 板子名字_config ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
例子: make origen_config ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-

2.编译
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
3.结果 顶层目录下 u-boot.bin可以烧录到板子上的
u-boot.map 将源码中的所有符号的地址存起来

4.清空
make clean 清理垃圾,除了配置文件
make distclean 清理所有的东西

u-boot简单移植

​ 我们需要修改的地方
​ cpu的代码 arch/arm/armv7 不需要动
​ 板子的代码 board/samsung/origen 要改
​ 配置文件 include/configs/origen.h 要改

如何做??? 为什么要这么做???

  1.每款板子都要有自己独立的代码,实现自己的初始化
  	cp board/samsung/origen  board/samsung/fs4412  
  	mv  board/samsung/fs4412/origen.c   
  	board/samsung/fs4412/fs4412.c 同时还要修改Makefile 
  		vi board/samsung/fs4412/Makefile 
  		将所有origen替换为fs4412 
  		
  2.每款板子都要有自己的配置文件  
  cp include/configs/origen.h    include/configs/fs4412.h

  3.  我们以前 make origen_config的时候, u-boot是如何知道 对应cpu 公司的 配置文件的......
  原理:  make origen_config 的时候 根据 origen去搜索boards.cfg文件中的选项,找出该board 's cpu and config file and vendor(公司 厂家)
  			
  4.配置和编译 
  	make fs4412_config ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- 
  	make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- 			

操作系统 os

板子上linux : kernel–内核 镜像 uImage 2M
Ubuntu/andriod : 基于内核,增加了很多app 镜像 iso 3.7GB
linux内核的版本发展:

4.5.0-21-generic
主版本号.次版本号.修改版本号-原厂自定义版本号

次版本号 为奇数的时候,表示当前系统版本是不稳定版本(实验版本)
偶数,表示 稳定版本

内核源码
解压在纯linux目录下 tar -xvf linux-3.14.tar.xz
顶层目录: linux第一级目录 后续编译和移植都是基于该目录下执行的.

平台相关 :
不同的cpu 不同的板子 代码和配置是不一样的
cpu: arch/arm/mach-xxx 表示一款芯片的初始化代码
board: 都描述了在设备树中 arch/arm/boot/dts 每个板子都要有自己的设备,描述自己有哪些硬件
config: 不同的板子配置不一样 arch/arm/configs/exynos_defconfig

平台无关 :
Documentation-文档 init-内核的初始化代码 lib sound
block-块设备 drivers-驱动程序 ipc-进程间通信实现 tools
COPYING firmware-固件 Kbuild Makefile samples usr-用户目录
CREDITS fs-文件系统的实现 Kconfig mm–内存管理 scripts virt
crypto–加密算法 include-头文件 kernel-核心实现 net-网络协议 security


编译
1.配置 告诉linux kernel 要编译那些功能进入 uImage
cp arch/arm/configs/exynos_defconfig .config

  	如何修改配置呢 : .config是默认配置文件  
  	方法1: 直接修改.config   不现实---看不懂
  	方法2: linux提供了图形化配置界面  
  	
  	make menuconfig    ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
  		依赖于库  	sudo  apt-get install libncurses5-dev

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

转存中…(img-F3AbUEez-1715433582512)]
[外链图片转存中…(img-B0hfyYss-1715433582512)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值