一 PC机 和 嵌入式设备启动流程

1.PC机 

(1)BIOS程序 
   [1]硬件初始化   (内存,其它硬件)
   [2]加载引导程序    

(2)引导程序    
   grub,lilo
   加载OS到内存 (选在需要加载的操作系统)

(3)操作系统 (Linux,Windows,...)

(4)挂载文件系统    

(5)运行引用程序

2.嵌入式设备 

(1)SOC芯片内嵌iROM代码
   [1]识别启动的存储介质(NandFlash/SD/MMC/EMMC/USB)
   [2]初始化SOC芯片控制存储介质的控制器
   [3]将存储介质的最前面一部分代码拷贝到SOC内部的iRAM

(2)iRAM中的bootloader第一阶段代码
   [1]系统时钟初始化(提高时钟信号)和内存初始化
   [2]将存储介质中bootloader拷贝到内存中

(3)内存中的bootloader第二阶段代码   
   [1]基本硬件初始化(网卡,其它硬件)
   [2]加载OS到内存 

(4)操作系统运行

(5)挂载文件系统 

(6)运行引用程序 

二 交叉开发 :在PC机上完成代码的编写与编译,在开发板上完成代码的运行

交叉开发工具链(编译器,链接器,汇编器,...)
特点:在PC上运行,编译出的指令是在目标板上运行

xxx-gcc:编译器 
xxx-gdb:调试 
xxx-ld :链接 
xxx-objdump:反汇编
xxx-readelf:读取可执行文件的elf头信息
(1)查看可执行程序运行平台
  [1]file  可执行文件
  [2]readelf -h 可执行文件

(2)可执行文件依赖的动态库
  [1]ldd  可执行文件 
  [2]readelf -a | grep "Shared"

xxx-nm :查看符号信息

nm  动态库的名字  (查看动态库有那些函数)
[1]T 函数名 ->这个函数是在库中实现
[2]U 函数名 ->这个函数是在其它库中实现

xxx-strip:去掉可执行文件或动态库的调试的符号信息(减肥)

xxx-objcopy:格式转换 (elf格式的文件  ----> xxx.bin)    

三 在Linux操作系统安装交叉开发工具链 

(1)在用户主目录下新建目录workdir
(2)在workdir目录下新建目录
   toolchain , uboot , kernel , fs 

(3)常用的压缩格式解压
   xxx.tar.gz , xxx.tar.bz2 ,xxx.tar.xz   

   [1]通用 tar -xvf xx.tar.*
   [2]tar -zxvf xxx.tar.gz 
      tar -jxvf xxx.tar.bz2 
      tar -Jxvf xxx.tar.xz 

----------------------------------------------------------------
将交叉开发工具链的路径,添加到环境变量PATH
目的:因为shell默认的搜索路径,是PATH环境变量的内容,如果想让可执行程序
     在任何路径下都可以执行,在需要添加到PATH环境变量 

export PATH=$PATH:自己路径 

永久有效,需要写到配置文件
/home/用户名/.bashrc  ->只针对当前登录的用户有效
/etc/bash.bashrc      ->针对所有的用户有效 

四 sd卡烧写u_boot 

(1)mkuboot.sh  -> 在烧写一个uboot到sd卡
(2)通过拨碼开关从sd卡启动
(2)在sd卡中新建一个sdupdate目录
(4)将自己编译好的u-boot-fs4412.bin拷贝到了sdupdate目录
(5)从sd卡启动,在启动的uboot中,
输入命令:sdfuse flash bootloader u-boot-fs4412.bin(将bootloader写到emmc)
(6)拨动拨碼开关从emmc启动 

五 用u_boot引导Linux内核 

1.配置tftp服务(文件传输)
(1)安装软件包
(2)修改默认的配置文件 /etc/default/tftpd-hpa 
(3)重新启动tftp服务   sudo /etc/init.d/tftpd-hpa restart

2.配置nfs服务(设置目录为网络上的共享目录)
(1)安装软件包
(2)修改默认的配置文件 /etc/exports
(3)重新启动nfs服务   sudo /etc/init.d/nfs-kernel-server restart

例如:
通过nfs访问192.168.1.125主机上/home/linux/fs/rootfs目录

挂载命令:
sudo mount 192.168.1.125:/home/linux/fs/rootfs /mnt 

表示将192.168.1.125主机上/home/linux/fs/rootfs的目录挂载到/mnt目录下 


六 u_boot常用命令  

(1)设置开发板ip地址
  setenv ipaddr  ip地址 

(2)设置tftp服务器端的ip地址
 setenv serverip  服务器端的地址 

(3)保存设置好的环境变量
 save

(4)删除环境变量
   setenv  环境变量名

(5)从主机下载程序到开发板
   tftp  内存地址  要下载的文件名

 eg:
   tftp 40008000  uImage

(6)引导Linux内核的命令
 bootm 内核所在内存地址  ramdisk所在内存地址  设备树所在内存地址

注意:
如果没有ramdisk,第二个参数用"-"代替


Logo

更多推荐