最新系统移植知识点总结_浅谈系统移植(1),2024年最新做了6年大数据开发开发

img
img
img

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

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

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

  						板子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

  1. 我们以前 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

内核裁剪: 通过menuconfig方法 增加/删除 需要/不需要功能,从而让uImage大小发生变化.

2.编译
make [uImage] ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- -j4

3.结果
arch/arm/boot
Image 原始的可以直接运行的内核 5M~
zImage 对Image进行压缩, 运行之前需要解压,但是zImage自带解压程序
uImage u:u-boot uboot专用的Image
u-boot 对zImage进行处理, 添加一些头部 生成uImage
前提: 需要u-boot的工具编译uboot之后,会tools/mkimage 拷贝到 /bin ,等于安装该软件
在编译内核的时候, make uImage ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- -j4
该命令会首先 生成 Image,然后生成zImage,最后 使用mkimge工具产生uImage

  1. 清空
    make clean 清零所有.o, 保留配置文件和 uImage Image zImage
    make distclean 清理所有东西

我们知道,有些驱动会集成到 kernel, 那些驱动有资格进入 kernel???
大厂:intel NVIDIA
小厂: 应用规模很大的芯片驱动
问题来了: 如果驱动没有集成到内核,怎么办???
添加到内核,然后可以通过menuconfig配置 编译与否!!!

  		思考: 需要那些功能
  			1.在menuconfig中显示出来   --显示
  				你要了解menuconfig的工作过程 	 Kconfig 
  			2.编译的时候, 可以根据 menuconfig的配置,决定是否编译 ---编译
  				还要知道 内核的编译过程			Makefil

文件系统 fileSystem

文件系统 他是一个 用户访问系统 接口/界面 ,all in file

普通的文件:
bin–存放命令的 etc–配置文件 linuxrc sbin–非系统级命令
tmp–临时文件 var-variable:日志 usr–存放用户文件的 /usr/bin /usr/sbin:存放用户命令的
lib–库文件 mnt-推荐mount挂载点

内存文件系统: 文件都建立在ram至上.
特点: 访问速度快,断电丢失

  	/proc: process 内核运行信息.
  		cmdline,即u-boot传过来的bootargs 
  		cpuinfo: cpu信息
  		###device-tree:   列举了设备树的各个节点,按照 数结构
  		diskstat :查看系统有有哪些分区  
  		meminfo: ram信息
  		modules:查看内核安装了哪些模块   lsmod:读取该文件,解析,打印 
  		partitions: 查看系统有哪些分区 	 
  		uptime: 时间 
  		version:  内核版本 
  		数字:
  			表示 进程号, 在对应的目录下可以看到改进程的各种属性	
  	/sys
  			驱动和设备的		
  				sys/bus/总线/devices  
  			
  	/dev	存放设备文件的地方  

开机启动:
kernel启动之后,挂载fs. 然后去fs中找到第一个程序–init程序(init=linuxrc).
init进程是第一个用户程序,pid=1. init进程要做哪些工作呢:
init读取一个文件 /etc/inittab

  	#this is run first except when booting in single-user mode.
  	::sysinit:/etc/init.d/rcS       ### 当系统发生 init事件, 执行后面的脚本  
  								系统一起动,init进程就会执行 后面的脚本
  	# /bin/sh invocations on selected ttys
  	# Start an "askfirst" shell on the console (whatever that may be)
  	::respawn:-/bin/sh
  	# Stuff to do when restarting the init process
  	::restart:/sbin/init
  	# Stuff to do before rebooting
  	::ctrlaltdel:/sbin/reboot
  	/etc/init.d/rcS  :
  	init进程开机就会执行,如果你想 让某个进程 开机执行,把程序写进去
      
      telnet#######
  远程登录命令:  
  	客户端 telnet  servIP
  	服务器: 开机启动telnetd
  			配置文件 /etc/passwd      	root::0:0:root:/:/bin/sh


深入文件系统
window: fat32 NTFS reFs 一直在发展
linux: ext2 ext3 ext4 ext5 …
他们不能用在嵌入式上,体积太大了

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

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

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

99464)]
[外链图片转存中…(img-lgAK5CzC-1715509099465)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

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

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值