【系统移植】基础理论与环境搭建

xiaoxiao2021-02-27  221

系统组成


windows系统 BIOS(引导系统) windows系统核心 应用程序 驱动 文件系统(程序 就是维护我们自己存储文件)

linux系统 bootloader(引导系统) kernel(linux内核) 应用程序 驱动 文件系统

开发环境


交叉工具链tftp服务器nfs服务器ubuntu系统(命令)

linux特点


linux系统有硬件限制linux系统比较复杂开源不免费,涉及到一些技术问题还是要自行解决有各种资源,需要自行移植优化是比较复杂

系统移植要点


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

交叉开发环境


硬件环境

fs4412/串口线(显示调试信息)/网线(传输数据)当前PC(ubuntu)拨码开关 0110 : EMMC启动模式1000 : SD卡启动模式

软件环境

交叉编译: 当前程序编译的处理器架构与执行的处理器架构不同,因此需要使用交叉编译来编译一个可以在arm架构下执行的可执行程序

交叉编译工具链: 交叉编译使用的工具

获取交叉编译工具链

可以自己制作交叉编译工具链(crosstools-ng)可以进行交叉工具链的下载使用厂家提供的交叉编译工具链

安装交叉工具链方法

在ubuntu中创建一个文件夹将gcc-4.6.4.tar 拷贝到当前目录下

解压当前文件(其中有几个目录bin目录下有很多可执行程序)

tar xvf gcc-4.6.4.tar

对PATH变量进行赋值(原有的PATH值和当前交叉工具链接下后的bin目录)

sudo vi /etc/bash.bashrc export PATH=$PATH:/home/lf/sys/gcc-4.6.4/bin (个人路径)

export:导出为全局 注:将当前bin目录下的可执行程序变成全局的命令,PATH变量就是表示系统中可执行命令路径的全局变量

重新执行当前脚本程序

source /etc/bash.bashrc

gcc的编译过程

预处理 (头文件包含/宏替换/条件编译) —->.i

cpp main.c > main.i

编译 将.i文件(c语言)翻译成汇编文件 —->.s

sudo ./cc1 main.i(/usr/lib/gcc/i686-linux-gnu/4.8

汇编 将.s生成.o文件(二进制文件) ——>.o

as main.s -o main.o

链接 主要是链接库文件(库函数)—>生成可执行文件

ld main.o -I 指定所有的头文件路径 -L 指定需要的库文件路径

elf相关命令

elf格式文件:就是linux/unix中常见的可执行文件格式(二进制文件格式)

补充命令:

readelf -h a.out(elf) 查看elf文件的头部信息 magic 魔数(标识的当前文件的类型的一串数据) machine/type readelf -a a.out(elf) 查看elf文件的全部信息 size a.out 查看对应的各个段的大小 nm a.out 查看符号表(表示各个段的开始和结束) 符号表的目的:表示编译的链接时,需要以何种方式进行链接

重要命令:

file a.out 查看文件的信息 strip a.out 瘦身命令(减小可执行程序的大小/删除的是静态库符号表) 注:不要对中间文件瘦身 objdump -d a.out 反汇编 我们可以去看init中的执行内容(是调用main函数等c语言执行内容) 注:当前会提供虚拟地址,如果可以知道问题的地址,我们可以通过地址找到执行位置(pc寄存器) objdump -D a.out 更加详细的信息(.dis表示反汇编文件后缀) objcopy 格式转换( 将elf格式文件转换为其他二进制格式) objcopy --gap-fill=0xff -O binary a.out main.bin 字节对齐填充为1 指明修改的格式 elf源文件 目标文件 objcopy --gap-fill=0xff -O srec a.out main.srec(摩托罗拉格式)

tftp服务器

文件传输服务器(网络)存储一些文件,提供给客户端下载

重启tftp服务器(监测当前是否包含tftp服务器)

sudo service tftpd-hpa restart

在线安装服务器

sudo apt-get install tftpd-hpa(tftp服务器端) tftp-hpa(tftp客户端)

配置(指定对应下载上传的目录)

sudo vi /etc/default/tftpd-hpa TFTP_USERNAME="tftp" tftp服务器的用户名 TFTP_DIRECTORY="/tftpboot" tftp的服务器目录(自行指定/自行创建/并且需要给目录最大权限) 注:最好tftp服务器目录放在根目录下 TFTP_ADDRESS="0.0.0.0:69" tftp协议地址,特定端口号 TFTP_OPTIONS="-c -s -l" tftp服务器权限选项(表示最大权限,可上传,可下载,可连接)

重启服务器生效当前配置

sudo service tftpd-hpa restart

本机测试

tftp + ip地址(发起连接的作为客户端) tftp 127.0.0.1 get + 文件名 上传 (上传文件为当前连接目录下的文件,上传位置为对应的tftp服务器目录) put +文件名 下载(从对应服务器目录中下载到当前路径) q 退出

nfs服务器(网络文件系统)

重启nfs服务器

sudo service nfs-kernel-server restart

在线安装

sudo apt-get install nfs-kernel-server

配置

sudo vi /etc/exports /source/rootfs *(rw,sync,no_subtree_check,no_root_squash)

指定目录(放文件系统) 可读可写 source/rootfs 需要自行创建并加最大权限

重启nfs服务器

sudo service nfs-kernel-server restart
转载请注明原文地址: https://www.6miu.com/read-10195.html

最新回复(0)