01嵌入式基本概念,嵌入式开发环境搭建,目标机搭建,TFTP服务搭建,NFS服务搭建
1.系统移植概述及环境搭建
1.通用嵌入式系统软件组成部分
无os嵌入式系统组成图
有os嵌入式系统组成图
2.Linux 在嵌入式中应用的条件与前景
嵌入式系统越来越追求数字化、网络化和智能化。这就要要求整个嵌入式系统必须是开放的、提供标准的API,并且能够方便地与众多第三方的软硬件沟通。
Linux是在GPL协议下开放源码的系统,内核可以定制剪裁、功能强大、支持多种文件系统、网络功能及其强大、非常适合高端嵌入式系统。
更重要的是 linux 不仅仅支持X86体系结构的cpu,还支持众多的体系结构的 cpu/mcu。
Android 系统最初就是基于linux-2.6.23的。硬件基本要求 armv5 ARM926EJ-S 200Mhz 64M
3.嵌入式Linux内核结构
4.Android系统
2.嵌入式开发环境搭建
1.嵌入式Linux交叉开发环境硬件基本组成
开发主机(Host)
目标机(Target)
连接介质
2.开发板启动流程
3.搭建嵌入式Linux开发环境的主要工作
准备开发主机、目标机(开发板)以及二者的连接介质
准备目标机代码
安装交叉工具链
开发主机上安装的软件(为方便调试)
终端软件(putty、minicom)
tftp服务
nfs服务
目标机安装(u-boot烧写调试)SD卡方式 Fastboot方式 (成功后,板子有串口信息输出)
主机和目标机能联通
网络自动 tftp 加载内核,并挂载nfs rootfs 启动
4.开发主机搭建
ubuntu环境
5.TFTP 服务
主机端tftp服务器配置
6.NFS 服务
7.目标机安装(u-boot烧写调试) – 需要SD卡
制作SD卡,并从SD卡启动 (使用的是2010版本u-boot,支持fastboot烧写的)
将sdfuse_q 拷贝到Linux下
将SD卡插入电脑并识别
进入sdfuse_q执行如下操作
$ sudo 。/mkuboot.sh /dev/sdb 出现下面的信息,表示SD启动盘制作成功
Fuse FS4412 trustzone uboot file into SD card/dev/sdb reader is identified.u-boot-fs4412.bin fusing.。.1029+1 records in1029+1 records out527104 bytes (527 kB) copied, 5.31834 s, 99.1 kB/su-boot-fs4412.bin image has been fused successfully.Eject SD card 关闭开发板电源,将拨码开关SW1调至(1000)(SD启动模式)
刚才做好的SD启动盘插入SD卡插槽
打开电源
8.fastboot烧写
连接USB线到板子上的USB OTG口 连接串口线到板子的COM2口 重启板子,并快速停下,在串口终端输入下面命令 /* 如果有有需要,可以格式化 eMMC 并创建分区 $ fdisk -c 0 $ fatformat mmc 0:1 $ ext3format mmc 0:2 $ ext3format mmc 0:3 $ ext3format mmc 0:4 */ $ reset 重启切换到2010版的sd卡启动 $ fastboot //会提示装驱动,选中第一天_环境搭建里的fastboot_driver 安装 打开dos终端 进入USB_fastboot_toolplatform-tools目录输入 》 fastboot.exe flash bootloader u-boot-fs4412.bin /* 同理可以烧录其它镜像 》 fastboot.exe flash kernel zImage 》 fastboot.exe flash ramdisk ramdisk-uboot.img 》 fastboot.exe flash system system.img 》 fastboot -w */ 关闭开发板电源,将拨码开关SW1调至0110(EMMC启动模式)后打开电源 从flash 的u-boot启动 /* 如果启动失败,可以通过拨号开关恢复到SD卡方式启动 如果启动成功,想恢复到原来的u-boot启动 (第一次输入reset后会自动切换回去,不用拔拨号开关) */
IP地址设置
板子能ping通虚拟机 (要关闭防火墙 网卡右键高级)
|板子 192.168.2.10 |
--------------------------
------------------------
|电脑 192.168.2.112 | //做中转用,和板子虚拟机IP要在同一网段, 且不能和它们IP一样
------------------------
------------------------
|虚拟机 192.168.2.231 |
确认板子和电脑是能通信的
设置电脑网卡ip 为192.168.2.112 255.255.255.0 192.168.9.1
启动板子,快速按任意键停在boot处,设置u-boot 的环境变量
#setenv serverip 192.168.2.231 //注意它与虚拟机里 ubuntu 的ip要一致#setenv ipaddr 192.168.2.10#setenv gatewayip 192.168.2.1 #pri 查看设置后效果
FS4412 # pribaudrate=115200bootargs=root=/dev/nfs nfsroot=192.168.9.120:/nfs/rootfs rw console=ttySAC2,115200 clk_ignore_unused init=/linuxrc ip=192.168.9.9bootcmd=tftp 41000000 uImage;tftp 42000000 exynos4412-fs4412.dtb;bootm 41000000 - 42000000bootdelay=3ethact=dm9000ethaddr=11:22:33:44:55:66gatewayip=192.168.2.1ipaddr =192.168.2.10netmask=255.255.255.0serverip=192.168.2.231 #ping 192.168.2.231
测试网络是否连通 ,注意在u-boot中, 它能ping电脑, 电脑不能ping它 ,注意,要拔掉jtag线,否则ping 会重启
host 192.168.2.231 is alive //is alive 表示ok
确认电脑和虚拟机时能通信
编辑 -》 虚拟网络编辑器 -》 VMnet0 桥接到(选连板子的网卡) //注意不要用automic,应手动指定对应的网卡
虚拟机 -》 设置 -》 网卡适配器 -》 自定义 (选 VMnet0)
使虚拟机内的虚拟网卡,关联到电脑实际用到的网卡
通过选VMnet0 和 VMnet1 。实现连板子,还是上internet的切换
网络自动 tftp 加载内核,并挂载nfs rootfs 启动
设置tftp方式加载内核
setenv bootcmd tftp 41000000 uImage;tftp 42000000 exynos4412-origen.dtb;bootm 41000000 - 42000000
setenv bootcmd 设置环境变量(自启动命令 bootcmd)
tftp 41000000 uImage; 通过tftp从虚拟机/tftpboot目录下下载内核uImage到板子的内存 41000000 处。 ; 用于分割多个命令
tftp 42000000 exynos4412-origen.dtb 通过tftp下载设备树文件 exynos4412-fs4412.dtb 到板子的内存 42000000 处
bootm 41000000 - 42000000 启动内核(41000000处放的是内核uImage, 42000000处放的是设备树文件)
挂载nfs rootfs
setenv bootargs root=/dev/nfs nfsroot=192.168.2.231:/nfs/rootfs rw console=ttySAC2,115200 clk_ignore_unused init=/linuxrc ip=192.168.2.10
setenv bootarg 设置环境变量( bootarg是启动参数)
root=/dev/nfs 指定根文件系统类型是 nfs
nfsroot=192.168.2.231:/source/rootfs 指定source rootfs的位置 (是在ip 是192.168.2.231的机器上 ,的/source/rootfs目录下)。 注意/nfs/rootfs必须和前面NFS服务配置文件设置一致
savenenv //保存环境变量
掉电重启动板子 看能否挂载nfs rootfs成功
能看到下面信息表示成功
[root@farsight ]# ls
etc linuxrc proc ***in tmp var
bin dev lib mnt root sys usr
在里面创建文件,电脑的/nfs/rootfs上同步变化
02Bootloader移植(bootloader基本概念,U-boot常用命令和配置编译
1.Bootloader 介绍
1.什么是Bootloader
Bootloader是硬件启动的引导程序,是运行操作系统的前提;
在操作系统内核或用户应用程序运行之前运行的一小段代码。对软硬件进行相应的初始化和设定,为最终运行操作系统准备好环境;
在嵌入式系统中,整个系统的启动加载任务通常由Bootloader来完成。
2.Bootloader的特点
Bootloader不属于操作系统,一般采用汇编语言和C语言开发。需要针对特定的硬件平台编写。
在移植系统时,首先为开发板移植Bootloader。
Bootloader不但依赖于CPU的体系结构,而且依赖于嵌入式系统板级设备的配置。
3.Bootloader的操作模式
自启动模式:在这种模式下,Bootloader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。
交互模式:在这种模式下,目标机上的Bootloader将通过串口或网络等通信手段从开发主机(Host)上下载内核映像和根文件系统映像等到RAM中。可以被 Bootloader写到目标机上的固态存储媒质中,或者直接进行系统的引导。也可以通过串口接收用户的命令。
2.常用bootloader介绍
3.U-boot介绍
u-boot(Universal Boot Loader)是德国DENX小组开发的用于多种嵌入式CPU的bootloader程序。遵循GPL条款。
从FADSROM、8xxROM 、PPCBOOT、Armboot逐步发展演化而来;
当前版本号:参考Makefile。
U-boot的特点:
代码结构清晰、易于移植(见目录结构)
支持多种处理器体系结构(见arch目录)
支持众多开发板(目前官方包中有200多种,见board目录)
命令丰富、有监控功能
支持网络协议、USB、SD等多种协议和设备
支持文件系统
更新较活跃,使用者多,有助于解决问题
4.U-boot命令介绍
命令分类
环境设置、数据传输、存储器访问、加载运行
1.printenv 显示所有环境变量
ORIGEN # pri
2.setenv 设置新的环境变量
ORIGEN # set myboard FS4412 ORIGEN # pri
3.saveenv 将当前定义的所有的环境变量值存入flash中
4.tftp 通过网络下载程序
U-boot # setenv ethaddr 11:22:33:44:55:66 //设置开发板的物理地址
U-boot # setenv ipaddr 192.168.2.10 U-boot # setenv serverip 192.168.2.231 U-boot # tftp 41000000 application.bin U-boot # tftp 41000000 zImage 5.protect 对Nor Flash写保护
protect on 0 10000 对区间[0x0, 0x10000]进行写保护protect off 0 10000 对上述区间取消写保护 6.erase 擦除Nor FLASH
erase all 擦除FLASH所有的扇区erase 0 10000 把FLASH区间 [0x0, 0x10000]擦除 7.Nand相关命令
nand read addr off sizenand write addr off sizenand erase [clean] [off size] NAND flash和NOR flash的区别详解
NAND flash按块访问和NOR flash按字节访问
NAND flash必须先擦出后写
8.movi 命令
eMMC
movi init —初始化eMMC并显示相关信息movi read u-boot/kernel addr //读u-boot或读kernel,可以选择movi write u-boot/kernel addrmovi read rootfs addr sizemovi write rootfs addr size 9.bootcmd 自启动命令
如果定义了该变量,在自启动模式下将会执行该环境变量中的命令。
将文件通过tftp自动下载到指定的地址
U-boot # setenv bootcmd tftp 41000000 uImage; bootm 41000000
U-boot # saveenv
bootargs 是uboot传递给内核到启动参数,是一个字符串console=xxx: 告诉内核启动时候到调试信息是从哪个设备输出,这里是串口2init=xxx: 告诉内核linux到第一个用户进程是什么root=xxx : 告诉内核根文件系统在哪里root=/dev/nfs 表示根文件系统在网路远端nfsroot=(开发板)ip:path rw 其中rw表示可读可写ip=xxx :(Ubuntu ip)告诉内核开机的时候内核的ip地址是多少(静态分配ip)
10.bootm kernel-addr ramdisk-addr dtb-addr
引导内核为内核传参,其中内核和ramdisk通常为mkimage处理过的二进制文件。
从这个地址处自动启动程序
11.go addr
执行内存中的二进制代码,简单的跳转到指定地址(运行裸机程序)
5.U-BOOT 配置编译
1.U-Boot目录结构
平台相关
arch, board, include…
平台无关
common, net, fs, drivers…
工具和文档
tools, doc
2.编译U-boot
U-boot的编译
整个工程通过Makefile来组织编译。顶层目录下的Makefile中包含了开发板的配置信息。从顶层目录开始递归地调用各级子目录下的Makefile,最后链接成u-boot映像。
顶层目录下的 Makefile
它负责u-boot整体配置和编译
在Makefile中指定使用的交叉工具链
配置u-boot: make origen_config
编译: make
使用build.sh编译
linux@linux:~/u-boot-2013.01-fs4412$ 。/build.sh
U-BOOT编译生成的映像文件
3.U-boot镜像下载烧录
烧录编译产生的镜像 u-boot.bin
初次或开发板代码损坏不能正常启动时,可采用JTAG工具烧录
专用的烧录工具如h-jtag或DNW等
在u-boot已经能工作,升级或修正U-boot时,可用U-boot中的命令来烧录
其它方式 如SD卡 , Fastboot命令
镜像固化位置
ROM、NOR FLASH、NAND FLASH EMMC等
u-boot-fs4412.bin
u-boot.bin是uboot编译源码后直接产生的,一般的的开发板,直接烧写这个文件就可以了
但是三星的cortex_a9 exynos4412这款CPU把uboot中一些初始化时钟等的代码剥离出去了,所以,编译好的这个u-boot.bin还要加上被剥离出去的部分,才可以正常使用
所以在build.sh脚本文件中,在u-boot.bin之前加上了剥离出去的部分后,生成了u-boot-fs4412.bin
01嵌入式基本概念,嵌入式开发环境搭建,目标机搭建,TFTP服务搭建,NFS服务搭建
1.系统移植概述及环境搭建
1.通用嵌入式系统软件组成部分
无os嵌入式系统组成图
有os嵌入式系统组成图
2.Linux 在嵌入式中应用的条件与前景
嵌入式系统越来越追求数字化、网络化和智能化。这就要要求整个嵌入式系统必须是开放的、提供标准的API,并且能够方便地与众多第三方的软硬件沟通。
Linux是在GPL协议下开放源码的系统,内核可以定制剪裁、功能强大、支持多种文件系统、网络功能及其强大、非常适合高端嵌入式系统。
更重要的是 linux 不仅仅支持X86体系结构的cpu,还支持众多的体系结构的 cpu/mcu。
Android 系统最初就是基于linux-2.6.23的。硬件基本要求 armv5 ARM926EJ-S 200Mhz 64M
3.嵌入式Linux内核结构
4.Android系统
2.嵌入式开发环境搭建
1.嵌入式Linux交叉开发环境硬件基本组成
开发主机(Host)
目标机(Target)
连接介质
2.开发板启动流程
3.搭建嵌入式Linux开发环境的主要工作
准备开发主机、目标机(开发板)以及二者的连接介质
准备目标机代码
安装交叉工具链
开发主机上安装的软件(为方便调试)
终端软件(putty、minicom)
tftp服务
nfs服务
目标机安装(u-boot烧写调试)SD卡方式 Fastboot方式 (成功后,板子有串口信息输出)
主机和目标机能联通
网络自动 tftp 加载内核,并挂载nfs rootfs 启动
4.开发主机搭建
ubuntu环境
5.TFTP 服务
主机端tftp服务器配置
6.NFS 服务
7.目标机安装(u-boot烧写调试) – 需要SD卡
制作SD卡,并从SD卡启动 (使用的是2010版本u-boot,支持fastboot烧写的)
将sdfuse_q 拷贝到Linux下
将SD卡插入电脑并识别
进入sdfuse_q执行如下操作
$ sudo 。/mkuboot.sh /dev/sdb 出现下面的信息,表示SD启动盘制作成功
Fuse FS4412 trustzone uboot file into SD card/dev/sdb reader is identified.u-boot-fs4412.bin fusing.。.1029+1 records in1029+1 records out527104 bytes (527 kB) copied, 5.31834 s, 99.1 kB/su-boot-fs4412.bin image has been fused successfully.Eject SD card 关闭开发板电源,将拨码开关SW1调至(1000)(SD启动模式)
刚才做好的SD启动盘插入SD卡插槽
打开电源
8.fastboot烧写
连接USB线到板子上的USB OTG口 连接串口线到板子的COM2口 重启板子,并快速停下,在串口终端输入下面命令 /* 如果有有需要,可以格式化 eMMC 并创建分区 $ fdisk -c 0 $ fatformat mmc 0:1 $ ext3format mmc 0:2 $ ext3format mmc 0:3 $ ext3format mmc 0:4 */ $ reset 重启切换到2010版的sd卡启动 $ fastboot //会提示装驱动,选中第一天_环境搭建里的fastboot_driver 安装 打开dos终端 进入USB_fastboot_toolplatform-tools目录输入 》 fastboot.exe flash bootloader u-boot-fs4412.bin /* 同理可以烧录其它镜像 》 fastboot.exe flash kernel zImage 》 fastboot.exe flash ramdisk ramdisk-uboot.img 》 fastboot.exe flash system system.img 》 fastboot -w */ 关闭开发板电源,将拨码开关SW1调至0110(EMMC启动模式)后打开电源 从flash 的u-boot启动 /* 如果启动失败,可以通过拨号开关恢复到SD卡方式启动 如果启动成功,想恢复到原来的u-boot启动 (第一次输入reset后会自动切换回去,不用拔拨号开关) */
IP地址设置
板子能ping通虚拟机 (要关闭防火墙 网卡右键高级)
|板子 192.168.2.10 |
--------------------------
------------------------
|电脑 192.168.2.112 | //做中转用,和板子虚拟机IP要在同一网段, 且不能和它们IP一样
------------------------
------------------------
|虚拟机 192.168.2.231 |
确认板子和电脑是能通信的
设置电脑网卡ip 为192.168.2.112 255.255.255.0 192.168.9.1
启动板子,快速按任意键停在boot处,设置u-boot 的环境变量
#setenv serverip 192.168.2.231 //注意它与虚拟机里 ubuntu 的ip要一致#setenv ipaddr 192.168.2.10#setenv gatewayip 192.168.2.1 #pri 查看设置后效果
FS4412 # pribaudrate=115200bootargs=root=/dev/nfs nfsroot=192.168.9.120:/nfs/rootfs rw console=ttySAC2,115200 clk_ignore_unused init=/linuxrc ip=192.168.9.9bootcmd=tftp 41000000 uImage;tftp 42000000 exynos4412-fs4412.dtb;bootm 41000000 - 42000000bootdelay=3ethact=dm9000ethaddr=11:22:33:44:55:66gatewayip=192.168.2.1ipaddr =192.168.2.10netmask=255.255.255.0serverip=192.168.2.231 #ping 192.168.2.231
测试网络是否连通 ,注意在u-boot中, 它能ping电脑, 电脑不能ping它 ,注意,要拔掉jtag线,否则ping 会重启
host 192.168.2.231 is alive //is alive 表示ok
确认电脑和虚拟机时能通信
编辑 -》 虚拟网络编辑器 -》 VMnet0 桥接到(选连板子的网卡) //注意不要用automic,应手动指定对应的网卡
虚拟机 -》 设置 -》 网卡适配器 -》 自定义 (选 VMnet0)
使虚拟机内的虚拟网卡,关联到电脑实际用到的网卡
通过选VMnet0 和 VMnet1 。实现连板子,还是上internet的切换
网络自动 tftp 加载内核,并挂载nfs rootfs 启动
设置tftp方式加载内核
setenv bootcmd tftp 41000000 uImage;tftp 42000000 exynos4412-origen.dtb;bootm 41000000 - 42000000
setenv bootcmd 设置环境变量(自启动命令 bootcmd)
tftp 41000000 uImage; 通过tftp从虚拟机/tftpboot目录下下载内核uImage到板子的内存 41000000 处。 ; 用于分割多个命令
tftp 42000000 exynos4412-origen.dtb 通过tftp下载设备树文件 exynos4412-fs4412.dtb 到板子的内存 42000000 处
bootm 41000000 - 42000000 启动内核(41000000处放的是内核uImage, 42000000处放的是设备树文件)
挂载nfs rootfs
setenv bootargs root=/dev/nfs nfsroot=192.168.2.231:/nfs/rootfs rw console=ttySAC2,115200 clk_ignore_unused init=/linuxrc ip=192.168.2.10
setenv bootarg 设置环境变量( bootarg是启动参数)
root=/dev/nfs 指定根文件系统类型是 nfs
nfsroot=192.168.2.231:/source/rootfs 指定source rootfs的位置 (是在ip 是192.168.2.231的机器上 ,的/source/rootfs目录下)。 注意/nfs/rootfs必须和前面NFS服务配置文件设置一致
savenenv //保存环境变量
掉电重启动板子 看能否挂载nfs rootfs成功
能看到下面信息表示成功
[root@farsight ]# ls
etc linuxrc proc ***in tmp var
bin dev lib mnt root sys usr
在里面创建文件,电脑的/nfs/rootfs上同步变化
02Bootloader移植(bootloader基本概念,U-boot常用命令和配置编译
1.Bootloader 介绍
1.什么是Bootloader
Bootloader是硬件启动的引导程序,是运行操作系统的前提;
在操作系统内核或用户应用程序运行之前运行的一小段代码。对软硬件进行相应的初始化和设定,为最终运行操作系统准备好环境;
在嵌入式系统中,整个系统的启动加载任务通常由Bootloader来完成。
2.Bootloader的特点
Bootloader不属于操作系统,一般采用汇编语言和C语言开发。需要针对特定的硬件平台编写。
在移植系统时,首先为开发板移植Bootloader。
Bootloader不但依赖于CPU的体系结构,而且依赖于嵌入式系统板级设备的配置。
3.Bootloader的操作模式
自启动模式:在这种模式下,Bootloader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。
交互模式:在这种模式下,目标机上的Bootloader将通过串口或网络等通信手段从开发主机(Host)上下载内核映像和根文件系统映像等到RAM中。可以被 Bootloader写到目标机上的固态存储媒质中,或者直接进行系统的引导。也可以通过串口接收用户的命令。
2.常用bootloader介绍
3.U-boot介绍
u-boot(Universal Boot Loader)是德国DENX小组开发的用于多种嵌入式CPU的bootloader程序。遵循GPL条款。
从FADSROM、8xxROM 、PPCBOOT、Armboot逐步发展演化而来;
当前版本号:参考Makefile。
U-boot的特点:
代码结构清晰、易于移植(见目录结构)
支持多种处理器体系结构(见arch目录)
支持众多开发板(目前官方包中有200多种,见board目录)
命令丰富、有监控功能
支持网络协议、USB、SD等多种协议和设备
支持文件系统
更新较活跃,使用者多,有助于解决问题
4.U-boot命令介绍
命令分类
环境设置、数据传输、存储器访问、加载运行
1.printenv 显示所有环境变量
ORIGEN # pri
2.setenv 设置新的环境变量
ORIGEN # set myboard FS4412 ORIGEN # pri
3.saveenv 将当前定义的所有的环境变量值存入flash中
4.tftp 通过网络下载程序
U-boot # setenv ethaddr 11:22:33:44:55:66 //设置开发板的物理地址
U-boot # setenv ipaddr 192.168.2.10 U-boot # setenv serverip 192.168.2.231 U-boot # tftp 41000000 application.bin U-boot # tftp 41000000 zImage 5.protect 对Nor Flash写保护
protect on 0 10000 对区间[0x0, 0x10000]进行写保护protect off 0 10000 对上述区间取消写保护 6.erase 擦除Nor FLASH
erase all 擦除FLASH所有的扇区erase 0 10000 把FLASH区间 [0x0, 0x10000]擦除 7.Nand相关命令
nand read addr off sizenand write addr off sizenand erase [clean] [off size] NAND flash和NOR flash的区别详解
NAND flash按块访问和NOR flash按字节访问
NAND flash必须先擦出后写
8.movi 命令
eMMC
movi init —初始化eMMC并显示相关信息movi read u-boot/kernel addr //读u-boot或读kernel,可以选择movi write u-boot/kernel addrmovi read rootfs addr sizemovi write rootfs addr size 9.bootcmd 自启动命令
如果定义了该变量,在自启动模式下将会执行该环境变量中的命令。
将文件通过tftp自动下载到指定的地址
U-boot # setenv bootcmd tftp 41000000 uImage; bootm 41000000
U-boot # saveenv
bootargs 是uboot传递给内核到启动参数,是一个字符串console=xxx: 告诉内核启动时候到调试信息是从哪个设备输出,这里是串口2init=xxx: 告诉内核linux到第一个用户进程是什么root=xxx : 告诉内核根文件系统在哪里root=/dev/nfs 表示根文件系统在网路远端nfsroot=(开发板)ip:path rw 其中rw表示可读可写ip=xxx :(Ubuntu ip)告诉内核开机的时候内核的ip地址是多少(静态分配ip)
10.bootm kernel-addr ramdisk-addr dtb-addr
引导内核为内核传参,其中内核和ramdisk通常为mkimage处理过的二进制文件。
从这个地址处自动启动程序
11.go addr
执行内存中的二进制代码,简单的跳转到指定地址(运行裸机程序)
5.U-BOOT 配置编译
1.U-Boot目录结构
平台相关
arch, board, include…
平台无关
common, net, fs, drivers…
工具和文档
tools, doc
2.编译U-boot
U-boot的编译
整个工程通过Makefile来组织编译。顶层目录下的Makefile中包含了开发板的配置信息。从顶层目录开始递归地调用各级子目录下的Makefile,最后链接成u-boot映像。
顶层目录下的 Makefile
它负责u-boot整体配置和编译
在Makefile中指定使用的交叉工具链
配置u-boot: make origen_config
编译: make
使用build.sh编译
linux@linux:~/u-boot-2013.01-fs4412$ 。/build.sh
U-BOOT编译生成的映像文件
3.U-boot镜像下载烧录
烧录编译产生的镜像 u-boot.bin
初次或开发板代码损坏不能正常启动时,可采用JTAG工具烧录
专用的烧录工具如h-jtag或DNW等
在u-boot已经能工作,升级或修正U-boot时,可用U-boot中的命令来烧录
其它方式 如SD卡 , Fastboot命令
镜像固化位置
ROM、NOR FLASH、NAND FLASH EMMC等
u-boot-fs4412.bin
u-boot.bin是uboot编译源码后直接产生的,一般的的开发板,直接烧写这个文件就可以了
但是三星的cortex_a9 exynos4412这款CPU把uboot中一些初始化时钟等的代码剥离出去了,所以,编译好的这个u-boot.bin还要加上被剥离出去的部分,才可以正常使用
所以在build.sh脚本文件中,在u-boot.bin之前加上了剥离出去的部分后,生成了u-boot-fs4412.bin
举报