9.2、系统移植

编程入门 行业动态 更新时间:2024-10-20 00:33:55

9.2、<a href=https://www.elefans.com/category/jswz/34/1770742.html style=系统移植"/>

9.2、系统移植

为什么需要bootloader 实现双系统 刷机 配置CPU 升级操作系统 U盘系统

bootloader 目的,加载OS 是一类 软件的统称
设备: bootloader os fs
你可以把bootloader当成 一个 单任务的 单片机程序
启动CPU --> 硬件初始化 --> [交互模式] --> 加载OS
过程:
汇编[开机启动 -->核心硬件初始化(串口 flash RAM CPU) --> 设置堆栈]
C[ 大部分硬件初始化(网卡,SD卡 USB…)–>交互模式–>加载OS ]

不同的板子 不同的芯片 代码都不一样,所以 需要对每款板子都要定制 bootloader

bootloader种类

系统BootLoader界面功能大小领域比例
PCbios/UEFIUI界面 鼠标键盘支持支持显示屏网卡功能强大300MB
安卓recoveryUI界面功能简单5M99%
嵌入式u-boot字符界面/命令行功能基本够用200KB嵌入式90%

如何使用u-boot
1、命令:
printenv 查看环境变量

setenv 环境变量名 值 :##setenv bootdelay 5
如果环境变量名字不存在,则创建该 环境变量
如果值为空,那么 则删除该环境变量

saveenv 将你修改的环境变量保存到flash中.

tftp 下载地址 文件名 前提是 ipaddr serverip 都要制定好
bootm: bootm os地址 dtb地址 fs地址
go : 地址,运行程序
ping ip地址:

2、环境变量: printenv 查看环境变量
baudrate=115200 波特率

bootargs=root=/dev/nfs nfsroot=192.168.3.193:/home/lsf/src/rootfs rw console=ttySAC2,115200 init=linuxrc ip=192.168.3.244  bootcmd=tftp 41000000 uImage; tftp 42000000 exynos4412-fs4412.dtb;bootm 41000000 - 42000000  bootdelay=5    进入交互模式的延时    
ethact=dm9000    
ethaddr=11:22:33:44:55:66  01:34:23:39:11:24    
fileaddr=41000000    
filesize=26D213    ipaddr=192.168.3.244    ip地址,板子的ip地址    netmask=255.255.255.0    子网掩码,板子的    
serverip=192.168.3.193    服务器的ip地址  [   tftp       ]    stderr=serial            
stdin=serial    
stdout=serial    
Environment size: 452/16380 bytes 

u-boot如何启动操作系统
1、告诉u-boot如何去启动,你在哪里告诉u-boot如何启动呢??? bootcmd环境变量里面

set bootcmd    tftp 41000000 uImage\;tftp 42000000 exynos4412-fs4412.dtb\;  bootm 41000000   -   42000000    

2、uboot 每次启动, 如果没有进入交互模式, 会 按照bootcmd里面的指示,去 加载系统.

3、如何告诉内核,文件系统在哪里

set bootargs  root=/dev/nfs nfsroot=192.168.2.29:/rootfs rw console=ttySAC2,115200 init=linuxrc ip=192.168.2.234root=/dev/nfs:  告诉内核文件系统的类型,  是=nfs    
nfsroot=192.168.2.165:/home/lsf/src/rootfs rw 
console=ttySAC2,115200        波特率
ip=192.168.3.244    指定内核起来之后,使用的ip地址

u-boot源码
从FAE哪里获取. 顶层目录: 在该目录下可以看到 uboot所有的源码 后续的编译 查找 都是从该目录开始.
平台相关: 不同的芯片 不同的板子 他们的初始化代码 配置文件 都不一样.

arch /cpu 平台: 里面 存放不同的 cpu的 初始化 代码
board: 存放不同板子的代码. 每个板子 都有一个自己的 目录源码

配置 可以控制整个u-boot源码的编译过程 ########通过修改配置文件,可以控制u-boot##########

存放在 include/configs/板子名字.h
里面都是一堆的宏定义/宏参数: 这些宏定义 决定了 u–booot源码的编译动作

平台无关: 一些命令 网络协议 环境边境 工作环境,不随着 芯片 板子的不同而不同,

编译
1、配置,告诉u-boot你想编译 哪一个板子的

make   板子名字_config     ARCH=arm    CROSS_COMPILE=arm-none-linux-gnueabi-                     

默认x86 默认gcc

2、编译

make   ARCH=arm    CROSS_COMPILE=arm-none-linux-gnueabi-  

结果,在顶层目录生成 u-boot.bin bin:binary 二进制,可以直接烧写到flash中去执行的.

3.清空

make distclean

认识u-boot源码
汇编: 开机启动 初始化核心硬件 自拷贝 设置堆栈
C: 大部分硬件初始化 [交互模式] 加载os

读代码,目的: 移植做准备,你需要关注 board 配置目录.

第一段代码: arch/arm/cpu/armv7/start.S b reset

b reset: 初始化 CPU, 切换到svc,关闭中断
–>bl cpu_init_cp15 初始化RAM相关的: 关闭缓存 关闭MMU
–>bl cpu_init_crit --> b lowlevel_init 实现在板子里面 在 board/samsung/origen/lowlevel_init.S 描述了 板子的相关 模块初始化,这里面的代码,你是可以改的.
–>b _main @@arch/arm/lib/crt0.S
1)初始化栈 ,为C做准备
2)b board_init_f @@arch/arm/lib/board.c 执行大部分硬件初始化 ,会调用 我们板子的 代码实现的函数 board/samsung/origen/origen.c
3)回到汇编, 执行 自拷贝, 将后续的代码全部拷贝到 RAM中,然后跳转到 RAM去执行.
4) ldr pc,=board_init_r @@arch/arm/lib/board.c for(;;) { main_loop(); //进入交互模式 + 加载OS }

u-boot 简单的移植
u-boot移植,相对 还是简单. 因为大部分外设不需要 关心, 重点需要 关注核心板上的
改动的地方: fs4412 <— origen
板子代码: board 每一个板子都不一样,所以每个板子都需要有自己目录
配置部门: include/configs 每个板子配置都不一样,所以每个板子都要有自己配置文件

1、 拷贝板子 相关代码

cp  board/samsung/origen    board/samsung/fs4412  -a    
mv  board/samsung/fs4412/origen.c   board/samsung/fs4412/fs4412.c         修改   board/samsung/fs4412/Makefile, 将 origen.o 替换为 fs4412.o

2、 配置文件

 cp  include/configs/origen.h    include/configs/fs4412.h    

3、修改boards.cfg 里面记录了 某个板子的 详细信息,包括 cpu 公司 配置文件 …
每次 make xxx_config ,都会去查找 boards.cfg ,找到该板子xxx的详细信息
模拟origen, 增加一行 fs4412 arm armv7 fs4412 samsung exynos
4、编译

make fs4412_config ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-        
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-

更多推荐

9.2、系统移植

本文发布于:2024-03-23 22:54:48,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1743810.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:系统

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!