系统移植基础

一、系统移植的目的

1) 软硬件可裁剪
硬件发生变化,软件要进行裁剪,对硬件适配。
2)学习linux驱动的开发,前提开发板上需要运行linux系统。
移植内核系统到开发版上

*要掌握系统移植的流程(编译流程和配置流程)

二、系统移植的四个部分

1)交叉编译环境的搭建
2)u-boot 移植
3)linux内核的移植
4)根文件系统的移植
系统移植的根本:
给FS6818平台安装一个Linux操作系统

三、本地开发和交叉开发的概念《环境搭建》
本地开发:应用层开发。
本地编写代码,编译代码,运行代码
交叉开发:arm开发,驱动开发。《交叉编译环境搭建》
PC端编写代码,编译代码
开发板上运行代码。

四、开发板和pc硬件连接

  1. 串口 :打印内核或者uboot源码信息
  2. 网线:开发板和pc进行通信,上网通过网线下载程序,内核源码镜像几兆,网线的传输速度快
  3. miniusb:uboot不支持网卡驱动,使用miniusb(OTG USB)下载程序 需要用到 fastboot 工具

五、安装交叉编译工具链

重点掌握

  1. 家目录下创建 Toolchain 目录
  2. 解压交叉编译工具链的压缩包
  3. 配置环境变量
 #打开
 sudo vi /etc/bash.bashrc
 #或者
 vi ~/.bashrc
 	#添加环境变量
	export PATH=$PATH:home/用户名/Toolchain/工具链名/bin/
  1. 使环境变量生效`
source /etc/bash.bashrc
# or
source .bashrc
  1. 测试交叉工具链是否安装成功
#终端执行
arm-none-linux-gnueabi-gcc -v
#打印以下信息,表示配置成功。
gcc version 4.5.1 (Sourcery G++ Lite 2010.09-50)

sudo apt-get install lib32ncurses5 ​
sudo apt-get install lib32z1   
#64位ubuntu系统安装一下这个32位兼容64位的库

六、交叉编译工具链中的GUN相关的命令

(ubuntu 系统中 x86 架构 的 GUN 命令在 usr/bin 目录)
交叉编译工具链中GUN命令所在的路径:/home/用户名/Toolchain/gcc-4.5.1/bin

前缀:arm-none-linux-gnueabi-xxx

重点掌握

  1. gcc ------- 编译命令 
    
    arm-none-linux-gnueabi-gcc -c xxx.c或xxx.S -o xxx.o
    
  2. ld  ------- 链接: 将所有的 .o 文件链接生成可执行文件
    
    arm-none-linux-gnueabi-ld -Ttext=0x43c00000 xxx.o xxx.o xxx.o -o xxx.elf 
    -Ttext=0x43c00000:指定程序的入口地址
    -Tmap.lds :指定链接脚本
    
  3. objdump -------- 将 .elf文件 反汇编 生成 反汇编文件 .dis
    
    arm-none-linux-gnueabi-objdimp -D ***.elf  > ***.dis
    
  4. objcopy -------- 将  .elf 文件生成 二进制文件(.bin)
    
    arm-none-linux-gnueabi-objcopy -O binary ***.elf ***.bin
    
  5. nm -------- 查看可执行文件的符号表 
    
    arm-none-linux-gnueabi-nm  ***.elf
    
  6. size -------- 查看可执行文件中各个数据段的大小
    
    arm-none-linux-gnueabi-size  ***.elf
    
  7. readelf -------- 查看可执行文件的头部信息
    
    arm-none-linux-gnueabi-readelf -h ***.elf
    
  8. strip -------- 压缩文件命令(重点掌握)
    删除可执行文件中的符号表 ,符号表不影响程序的运行
    注意:不可以对中间文件执行strip命令 比如:.o文件
    
    arm-none-linux-gnueabi-strip 要压缩的文件名
    
  9. addr2line -------- 根据地址信息定位错误信息 (重要掌握)
    -e:指定可执行文件的
    -a -f: 回显错误地址对应的函数的名字
    
     arm-none-linux-gnueabi-addr2line -e ***.elf 错误地址 -a -f
    
  10. 总结 :
    gnu命令名   --help  : 查看帮助手册
    百度gnu命令的使用
    

七、tftp 服务

重点掌握
tftp:基于TCP/IP的简单文本文件传输协议。
目的:可以使用 tftp 命令通过网线下载程序到开发板上

  1. 检查 ubuntu 是否安装tftp服务

        dpkg -s tftpd-hpa
    
  2. 安装tftp服务

       前提: ubuntu 可以上网
       sudo apt-get install -f 
       sudo apt-get update
       sudo apt-get install tftph-hpa tftp-hpa
    
  3. 配置 tftp 相关环境变量

     1> 在家目录下创建 tftpboot 目录,并设置权限为 777 			
     tftpboot文件夹的作用? 
     	将需要下载的文件,放到 tftpboot 目录下,当使用 tftp 命令下载时,tftp 命令会自动的到ubuntu 的 tftpboot 目录下找对应的要下载的文件
     2> 修改tftp的环境变量
     	打开tftp的配置文件:
     	sudo vi /etc/default/tftpd-hpa 
     	修改配置文件中的内容,修改为以下:
    

    修改配置文件中的内容,修改为以下:

     1 # /etc/default/tftpd-hpa
    			  2 
    			  3 TFTP_USERNAME="tftp" 
    			  4 TFTP_DIRECTORY="/var/lib/tftpboot"
    			  5 TFTP_ADDRESS=":69"
    			  6 TFTP_OPTIONS="--secure"
    

    修改为以下形式:

      1 # /etc/default/tftpd-hpa
    			  2 
    			  # tftp服务
    			  3 TFTP_USERNAME="tftp"
    			  # 指定自己的tftpboot的路径
    			  4 TFTP_DIRECTORY="/home/hqyj/tftpboot"
    			  # 端口号默认为69
    			  5 TFTP_ADDRESS="0.0.0.0:69"
    			  # 权限相关参数
    			  6 TFTP_OPTIONS="-c -s -l"
    
  4. 重启 tftp 服务

    $ sudo service tftpd-hpa restart  重启tftp服务
    
  5. 测试tftp服务是否安装成功

     $ : 表示在ubuntu中执行的命令
     # :表示在串口工具中执行的命令
     
     $ tftp 127.0.0.1   启动tftp服务
     tftp> put  文件名		---》 上传当前目录下的文件到tftpboot目录下
     tftp> get  文件名		---》 从tftpboot目录下下载文件到当前目录下
     tftp> q				---》退出tftp服务
    

为什么安装tftp服务? 参考图:安装tftp服务.png

八、安装NFS服务(通过网络的方式挂载跟文件系统

NFS : Network File System
重点掌握

  1. 检查 ubuntu 是否安装 nfs 服务

     dpkg -s nfs-kernel-server
    
  2. 安装 nfs 服务

     sudo apt-get install nfs-kernel-serv
    
  3. 配置 nfs 服务的环境变量

     打开配置文件:$ sudo vi /etc/exports
    

    在文件的末尾添加以下内容:

    
    
    /home/用户名/nfs/rootfs  *(rw,sync,no_subtree_check,no_root_squash)
    
    :<<'	
    	/home/用户名/nfs/rootfs:根文件系统的路径
    			nfs服务从这个路径下挂在跟文件系统
    			注:修改为自己的跟文件系统的路径
    
    	*:所有的用户
    	rw:可读可写的权限
    	sync:同步
    	no_subtree_check:不检查子目录的权限
    	no_root_squash:如果客户端时root用户,
    		具有相同的访问权限
    
    	注意: *(  ----》 之间不允许有空格,否则会报没有写的权限
    	'
    	
    
    
    
  4. 在家目录下创建 nfs 目录,并修改权限为 777

    $ cd ~
    $ mkdir nfs 
    $ chmod 777 nfs 
    将 根文件系统 的压缩包拷贝到家目录录下的 nfs 中 并解压
    
  5. 重启 nfs 服务

    sudo server nfs-kernel-server restart
    
  6. 本地测试nfs服务是否安装成功

    原理:将跟文件系统使用mount命令挂载到ubuntu的/mnt目录下
    
    sudo mount -t nfs 192.168.1.222:/home/hqyj/nfs/rootfs /mnt
    
    			-t nfs : 使用nfs服务
    			192.168.1.222:/home/hqyj/nfs/rootfs 	----》ip:路径
    				注:改成自己的ubuntu的ip地址     改成自己的跟文件系统的路径
    			/mnt  --> 跟文件系统挂在到/mnt目录下
    
    取消跟文件系统的挂载
    
    sudo umount /mnt 
    
    注意:不可已在/mnt路径下执行卸载命令
    

为什么安装nfs服务? 参考图:安装nfs服务.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值