PC机和嵌入式设备启动流程
一 PC机 和 嵌入式设备启动流程1.PC机 (1)BIOS程序 [1]硬件初始化 (内存,其它硬件) [2]加载引导程序 (2)引导程序 grub,lilo 加载OS到内存 (选在需要加载的操作系统)(3)操作系统 (Linux,Windows,...)(4)挂载文件系统
·
一 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,第二个参数用"-"代替
更多推荐
已为社区贡献1条内容
所有评论(0)