完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
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 |
|
|
|
只有小组成员才能发言,加入小组>>
4413个成员聚集在这个小组
加入小组3307 浏览 0 评论
航顺(HK)联合电子发烧友推出“近距离体验高性能Cortex-M3,免费申请价值288元评估板
4246 浏览 1 评论
4266 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-4 03:04 , Processed in 0.789046 second(s), Total 75, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号