首页 嵌入式Linux软件设计

嵌入式Linux软件设计

举报
开通vip

嵌入式Linux软件设计嵌入式系统原理与应用第7章嵌入式Linux软件设计对于计算机系统来说,从开机上电到操作系统启动需要一个引导过程。嵌入式Linux系统同样离不开引导程序,这个引导程序就叫作Bootloader。嵌入式Linux软件设计嵌入式系统的Bootloader是基于特定硬件平台的;不可能为所有的嵌入式系统建立一个通用的Bootloader;Bootloader不但依赖于CPU的体系结构,而且依赖于嵌入式系统板级设备的配置。——在操作系统运行之前执行的一段小程序。现在大部分Bootloader具有很多共性,能够支持多种体系结构的...

嵌入式Linux软件设计
嵌入式系统原理与应用第7章嵌入式Linux软件设计对于计算机系统来说,从开机上电到操作系统启动需要一个引导过程。嵌入式Linux系统同样离不开引导程序,这个引导程序就叫作Bootloader。嵌入式Linux软件设计嵌入式系统的Bootloader是基于特定硬件平台的;不可能为所有的嵌入式系统建立一个通用的Bootloader;Bootloader不但依赖于CPU的体系结构,而且依赖于嵌入式系统板级设备的配置。——在操作系统运行之前执行的一段小程序。现在大部分Bootloader具有很多共性,能够支持多种体系结构的嵌入式系统。例如,U-Boot。通常能够自动从存储介质上启动,能够引导操作系统,支持串口和以太网接口。7.1Bootloader引导程序7.1.1Bootloader的启动过程系统加电或复位后,ARM处理器从地址0x00000000取第一条指令。嵌入式系统的开发板都要把板上ROM或Flash映射到这个地址。因此,必须把Bootloader程序存储在相应的Flash位置。系统加电后,CPU将首先执行它。设置中断向量表初始化存储器系统初始化堆栈初始化有特殊要求的端口和内部设备初始化用户程序执行环境改变处理器的工作模式转移到主应用程序或加载操作系统Bootloader的启动过程和完成的任务嵌入式Linux软件设计7.1.1Bootloader的启动过程系统加电或复位后,ARM处理器从地址0x00000000取第一条指令。嵌入式系统的开发板都要把板上ROM或Flash映射到这个地址。因此,必须把Bootloader程序存储在相应的Flash位置。系统加电后,CPU将首先执行它。Bootloader启动完成后,一般会建立主机和目标机之间串口连接,输出出错或执行结果信息到串口终端,可以从串口终端读取用户控制命令。嵌入式Linux软件设计7.1.2开放源码的Linux引导程序BootloaderMonitor描   述x86ARMLILO否Linux磁盘引导程序是否GRUB否GNU的LILO替代程序是否Loadlin否从DOS引导Linux是否ROLO否从ROM引导Linux而不需要BIOS是否Etherboot否通过以太网卡启动Linux系统的固件是否LinuxBIOS否完全替代BUIS的Linux引导程序是否BLOB否LART等硬件平台的引导程序否是u-boot是通用引导程序是是RedBoot是基于eCos的引导程序是是嵌入式Linux软件设计ARM的BootLoader:ARM处理器的芯片商很多,所以每种芯片的开发板都有自己的Bootloader。结果ARMbootloader也变得多种多样。早期:ARM720处理器的armbootStrongARM平台的blobS3C2410处理器开发板上的vivi等现在常用:u-boot(UniversalBootLoader)armboot已经并入了u-bootu-boot也支持了ARM/XSCALE平台u-boot已经成为ARM平台事实上的 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 Bootloader。嵌入式Linux软件设计u-boot现在u-boot已经能够支持PowerPC、ARM、X86、MIPS体系结构的上百种开发板,已经成为功能最多、灵活性最强并且开发最积极的开放源码Bootloader。目前仍然由DENX的WolfgangDenk维护。DENX相关的网站及u-boot软件包下载:http://www.denx.de/en/News/WebHomeftp.denx.de/pub/u-boot目前版本:u-boot-2014.04.tar.bz2德国DENX小组开发的交叉平台的BootLoaderu-boot的版本并非越新越好,稳定性是最重要的。u-boot的版本升级非常困难,要有专业人员的支持。嵌入式Linux软件设计u-boot的常用命令(JXARM-2401-1)U-Boot1.1.2(Apr262005-12:27:13)U-Bootcode:11080000->1109614C BSS:->1109A91CRAMConfiguration:Bank#0:1000000032MBMicronStrataFlashMT28F128J3deviceinitializedFlash:32MBIn:   serialOut:  serialErr:  serialHitanykeytostopautoboot: 0U-Boot>u-boot上电启动后,按任意键可以退出自动启动状态,进入命令行。在JXARM-2401-1上则自动进入命令行:U-Boot2.1.4(Sep292005-18:29:18)U-Bootcode:33F80000->33FA8B44BSS:->33FDDE54RAMConfiguration:Bank#0:3000000064MBFlash:32MBIn:serialOut:serialErr:serialJX2410#嵌入式Linux软件设计u-boot的常用命令在命令行提示符下,可以输入u-boot的命令并执行。u-boot支持几十个常用命令,通过这些命令可以:对开发板进行调试引导Linux、WinCE等内核擦写Flash完成系统部署等输入help命令,可以得到当前u-boot的所有命令列表。每一条命令后面是简单的命令说明。u-boot还提供了更加详细的命令帮助:help命令名嵌入式Linux软件设计(1)信息查看命令help|help命令名-帮助信息bdinfo-打印目标版配置信息flinfo-打印Flash信息(2)存储器操作命令base|basen-查看|设置地址偏移md[.b,.w,.l]address[#ofobjects]-显示存储器数据.b,.w,.l:-分别以字节/半字/字为单位address:-起始地址#ofobjects:-要显示的数据个数嵌入式Linux软件设计(2)存储器操作命令nm[.b,.w,.l]address-修改单个数据address:-要修改的数据地址输入空格键退出命令mm[.b,.w,.l]address-自动地址增量修改数据address:-要修改的数据起始地址直接回车键数据不修改,进入下一个要修改的数据;输入空格键退出命令嵌入式Linux软件设计(2)存储器操作命令mw[.b,.w,.l]addressvalue[count]-存储器填充address:-要填充的内存起始地址value:-要填充的数值count:-要填充的数量cmp[.b,.w,.l]addr1addr2count-比较2块内存中的内容addr1:-第一块内存的起始地址addr2:-第二块内存的起始地址count:-要比较的数目嵌入式Linux软件设计(2)存储器操作命令cp[.b,.w,.l]sourcetargetcount-在内存中复制数据块,包括对Flash的读写操作source:-要复制的数据块起始地址(源地址)target:-数据块要复制到的地址(目标地址)这个地址如果在Flash中,那么会直接调用写Flash的函数操作。U-Boot写Flash就使用这个命令,写前要把对应Flash区域擦除。count:-要复制的数据块大小,注意单位嵌入式Linux软件设计(2)存储器操作命令mtest[start[end[pattern]]]-RAM读写测试start:-RAM的起始地址end:-RAM的结束地址crc32addresscount[addr]-计算存储数据的校验和address:-需要校验的数据起始地址count:-要校验的数据字节数addr:-指定保存结果的地址嵌入式Linux软件设计(3)Flash存储器操作命令cp[.b,.w,.l]sourcetargetcount-在Flash中复制数据块,使用方法同存储器操作erasestartenderaseN:SF[-SL]erasebankNeraseall-擦除FlashROM中的内容start:-必须是擦除块的起始地址end:-必须是擦除块末尾的结束地址N:-Flash的组号SF:-擦除起始扇区号SL:-擦除结束扇区号嵌入式Linux软件设计(3)Flash存储器操作命令protecton startendprotecton N:SF[-SL]protecton bankNprotecton allprotectoffstartendprotectoffN:SF[-SL]protectoffbankNprotectoffall-对Flash写保护的操作,可以使能和解除写保护on:-使能写保护off:-解除写保护嵌入式Linux软件设计(4)执行控制命令bootm[addr[arg...]]-引导启动存储在RAM中或Flash中的程序映像addr:-是程序映像的地址,这个程序映像必须转换成U-Boot的格式。arg:-对引导Linux内核有用,作为U-Boot格式的RAMDISK映像存储地址;也可以是传递给Linux内核的参数缺省:传递bootargs环境变量给内核嵌入式Linux软件设计(4)执行控制命令goaddr[arg...]-执行应用程序addr:-执行程序的入口地址arg:-传递给程序的参数,可以不用嵌入式Linux软件设计(5)下载命令loadb[off][baud]-通过串口线下载二进制格式文件off:-装载到的地址baud:-波特率tftpboot[loadAddress][bootfilename]-使用TFTP 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 通过网络按照二进制格式下载文件loadAddress:-下载到的内存地址bootfilename:-要下载的文件名称,必须放在TFTP服务器相应的目录下使用这个命令,必须配置好相关的环境变量。例如serverip和ipaddr。嵌入式Linux软件设计(6)环境变量操作命令printenvprintenvname…-打印环境变量环境变量解释说明bootdelay定义执行自动启动的等候秒数baudrate定义串口控制台的波特率netmask定义以太网接口的掩码ethaddr定义以太网接口的MAC地址bootfile定义缺省的下载文件bootargs定义传递给Linux内核的命令行参数bootcmd定义自动启动时执行的几条命令serverip定义tftp服务器端的IP地址ipaddr定义本地的IP地址stdin定义标准输入设备,一般是串口stdout定义标准输出设备,一般是串口stderr定义标准出错信息输出设备,一般是串口嵌入式Linux软件设计(6)环境变量操作命令saveenv-保存环境变量到Flashsetenvnamevalue...-设置环境变量setenvname-删除环境变量run[...]-运行一个环境变量中的命令嵌入式Linux软件设计嵌入式Linux软件设计板级移植:对Linux的发行版本中已经支持的CPU,只需对板级硬件进行适当的修改即可。片级移植:对Linux的发行版本中尚未支持的CPU,需要添加对CPU内核的移植,需要对Linux内核有详尽的了解。移植流程:构建交叉编译环境内核配置makemenuconfig编译启动u-bootTFTP下载映像文件运行Linux主机目标机7.2Linux的移植7.2.1Linux内核(v2.4)源代码目录结构Linux2.4.x/arch/drivers/fs/include/Documentation/ipc/kernel/lib/mm/init/net/scripts/arm/alpha/m68k/boot/mach-s3c2410/kernel/lib/mm/asm-arm/linux/net/arch-s3c2410/proc-armv嵌入式Linux软件设计7.2.1Linux内核(v2.4)源代码目录结构Linux2.4.x/arch/drivers/fs/include/Documentation/ipc/kernel/lib/mm/init/net/scripts/arm/alpha/m68k/boot/mach-s3c2410/kernel/lib/mm/asm-arm/linux/net/arch-s3c2410/proc-armv内核的说明文档设备驱动程序,其下细分为不同种类的设备。如block、char、mtd、net、usb、video…内核支持的文件系统的实现如ext2、ext3、cramfs、jffs2、nfs…库文件代码内核的核心代码,包括进程调度、定时器等嵌入式Linux软件设计7.2.1Linux内核(v2.4)源代码目录结构Linux2.4.x/arch/drivers/fs/include/Documentation/ipc/kernel/lib/mm/init/net/scripts/arm/alpha/m68k/boot/mach-s3c2410/kernel/lib/mm/asm-arm/linux/net/arch-s3c2410/proc-armv头文件。系统相关:include/linux下ARM体系结构相关:include/asm-arm下arm平台相关内核的核心代码移植linux到S3C2410,主要的工作目录嵌入式Linux软件设计7.2.1Linux内核(v2.4)源代码目录结构Linux2.4.x/arch/drivers/fs/include/Documentation/ipc/kernel/lib/mm/init/net/scripts/arm/alpha/m68k/boot/mach-s3c2410/kernel/lib/mm/asm-arm/linux/net/arch-s3c2410/proc-armv内核初始化代码进程间通信代码内存管理代码,和arm平台相关的内核管理代码在arch/arm/mm目录下网络相关的代码,实现了各种常见的网络协议用于配置内核的各种脚本文件,只在配置时有意义嵌入式Linux软件设计7.2.2Linux内核源码http://www.kernel.org/v2.6版本以上代码,最新版本3.1.4http://download.chinaunix.net/下载:系统相关->linuxkernel(Linux内核)v2.2版本以上代码http://www.oldlinux.org/index_cn.html学习Linux内核基本工作原理的早期内核代码下载到源代码之后,可用tar命令解压到某个目录。本课程采用的源代码版本为v2.4嵌入式Linux软件设计目前常用:arm-linux-gcc和arm-elf-gcc区别:arm-elf-gcc:针对ARM+ucLinux的开发环境,使用ucLinuxkernel,ARM处理器无MMU。arm-linux-gcc:针对ARM+Linux的开发环境,使用Linuxkernel,ARM处理器必须是有硬件MMU的。这两种交叉工具链可在GNU网站下载源码自行编译生成,也可以直接安装编译完毕的打包文件。7.2.3交叉编译环境的建立嵌入式Linux软件设计arm-linux-gcc交叉工具链的版本并非越新越好,一般是根据操作系统的内核来选定版本。如内核是v2.4的,一般用arm-linux-gcc-3.3.2版本v2.6的,就要用arm-linux-gcc-3.4.1版本arm-linux-gccARMGNU交叉工具链的获得网站下载http://ftp.arm.linux.org.uk/pub/armlinux/toolchain/http://www.handhelds.org/http://www.arm9.net/download.asp或google、百度搜索"arm-linux-gcc"嵌入式Linux软件设计1.Linux内核的配置系统——三个部分组成:Makefile分布在Linux内核源代码根目录及各层目录中,定义Linux内核的编译规则,编译完成后,每个源代码目录下都会生成一个名叫built-in.o的文件。这个文件由源代码目录下的所有源文件编译后的目标文件链接而成;而不同的built-in.o又被上层目录中的Makefile链接成更大的built-in.o,直到最后链接成为一个内核vmlinux.o。配置文件.config给用户提供默认的配置选项,并保存用户修改后的配置信息。嵌入式Linux软件设计7.2.4Linux内核文件的修改(配置)配置工具makeconfig基于文本对话的配置,面向专业的内核开发人员;makexconfig基于图形界面的配置方式,需安装ncurses,ubuntu下的安装方法:apt-getinstallncurses-devmakemenuconfig采用目录的方式,直观易用,推荐的内核配置方式。配置工具使用脚本语言Tcl/TK、Perl编写,也包含一些用C编写的代码。内核移植编译无须了解它们的原理,只需要知道如何修改Makefile和配置文件即可。嵌入式Linux软件设计2.makemenuconfig过程makemenuconfig配置界面嵌入式Linux软件设计2.makemenuconfig过程那么在配置界面出现以前,系统要作什么工作呢?makemenuconfig命令会根据linux内核根目录下的makefile文件内容生成特定的配置界面;读取linux内核根目录下的.config文件内容作为默认的配置选项;这时,我们可以根据需要来用空格、回车和Esc来更改配置界面中的所有选项;当保存makemenuconfig选项时,系统会将在配置界面中对内核配置所做的所有修改更新到.config文件中。在实际编译中,我们将用已改好的config-jx2410文件替换.config配置文件。嵌入式Linux软件设计3.编译内核前针对目标平台对一些文件的修改目标平台是ARM,在x86平台上进行编译需要进行交叉编译修改内核的顶层Makefile文件:……………………………………………………………ARCH:=armCROSS_COMPILE=/交叉编译器所在的目录/arm-linux-……………………………………………………………指示编译器使用arm-linux-前缀,进行交叉编译。修改NandFlash分区,要和Bootloader中的相同使内核支持devfs(设备文件系统)移植CS8900A网卡驱动详细内容可参考源代码根目录:/Documentation/下的文档嵌入式Linux软件设计本课程中作为教学用的内核,已经对相关文件进行了修改,在编译内核时可以直接使用。已修改好的内核源代码位置在:/home/cvtech/jx2410/linux嵌入式Linux软件设计4.具体操作过程cd/home/cvtech/jx2410/linuxmakemenuconfig在弹出的菜单中选择"LoadanAlternateConfigurationFile"载入config-jx2410作为.config文件的默认设置;根据需要进行定制修改;保存rm.configcpconfig-jx2410.config7.2.5Linux内核及文件系统的编译(1)建立依赖关系makedep(2)编译makezImage编译完成后,会将生成的zImage文件自动拷贝到:/tftpboot目录嵌入式Linux软件设计1.编译Linux内核2.制作文件系统嵌入式系统采用基于Flash(NOR和NAND)的文件系统,如:jffs2,yaffs,Cramfs,Romfs,Ramdisk,ramfs等,一般都采用专用的工具软件制作。本课程不讲解文件系统的制作方法,但在本课件附录中提供一个ramdisk文件系统的制作方法和步骤。7.2.6Linux内核及文件系统的下载连接好网线,串口线,启动minicom①tftp30800000ramdisk.gz②tftp30008000zImage③go30008000为方便内核下载,在u-boot内已设置好环境变量:loadlinux=tftp30800000ramdisk.gz;tftp30008000zImage;go30008000指令:runloadlinux可以自动下载文件和运行系统。ramdisk.gz根文件系统在:/home/cvtech/jx2410/flashupdate目录,要将其拷贝到/tftpboot目录。嵌入式Linux软件设计主机和ARM目标机的连接方式嵌入式Linux软件设计主机通过RS232接口和以太网接口与ARM目标机相连RS232以太网嵌入式Linux软件设计7.3驱动程序的开发Linux下的驱动程序开发有一定的难度,要了解设备驱动程序的工作原理、程序结构、如何将设备驱动添加到内核中、如何将设备驱动编译成驱动模块等更多的内核知识和编程经验,本课程对此章节不作要求。嵌入式Linux软件设计7.4应用程序开发7.4.1应用程序的开发步骤编写程序源代码编写makefile文件编译程序运行程序将生成的可执行文件加入系统嵌入式Linux软件设计应用程序开发的实例(设当前工作目录是~\hello\)1.编写Hello程序(vihello.c)#include#includeintmain(intargc,char**argv){printf("HelloReaderCongradulations!\n");return(0);}2.编写makefile文件(vimakefile)CC=/usr/local/arm/3.3.2/bin/arm-linux-gcchello:hello.c$(CC)–ohellohello.cclean:rm–f*.o嵌入式Linux软件设计3.编译:/hello#make如无错,将生成"hello"可执行文件4.运行由于编译的是ARM代码,必须下载到ARM平台的Linux操作系统上运行,一般的方法是启动主机的NFS服务,将主机存放可执行文件目录映射为目标机的某个目录,这样目标机就可以直接运行程序了。确定主机已启动了NFS服务;连接好网线和串口线,启动主机上的minicom。启动JX2410实验平台上的Linux系统(在u-boot下按"7"键)将"hello"文件拷贝到NFS服务的共享目录,如/tftpboot步骤:嵌入式Linux软件设计等待Linux系统启动完毕,在minicom中键入"Ctrl-c"进入命令行,键入命令:mount192.168.1.180:/tftpboot/mnt/nfs将主机的/tftpboot目录挂接到目标机的/mnt/nfs执行程序:cd/mnt/nfs./hello当运行正确无误后,就可将其加入到文件系统,重新生成文件系统并下载到目标机后,就可以在加入的目录中找到这个可执行文件,直接./hello运行。嵌入式Linux软件设计本学期课程到此结束。本章附录的目录:附录1:arm-linux-gccARMGNU交叉工具链的安装附录1:RedHat9下的TFTP服务器配置附录2:ubuntu下的TFTP服务器配置附录3:ubuntu下的串口工具minicom安装配置附录4:RamDisk文件系统的创建附录5:ubuntu下网络文件系统(NFS)的安装配置附录1:arm-linux-gccARMGNU交叉工具链的安装首先确保安装了标准C开发环境:sudoapt-getinstallbuild-essential在ubuntu中是默认安装的;Ctrl+Alt+T启动终端控制台,进入到文件保存目录:cd/home/arm安装:sudotar-jxvfarm-linux-gcc-3.3.2.tar.bz2-C/将下载的arm-linux-gcc-3.3.2.tar.bz2保存到某个目录下,一般是家目录下,如/home/arm;嵌入式Linux软件设计现在可以在:/usr/local/arm/3.3.2看到安装的交叉编译工具。设定编译的环境变量察看当前的环境变量:echo$PATH/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin为了能在命令行中使用交叉编译命令的方便,一般要将交叉编译器的路径加入到PATH;每一个环境变量的路径用":"号分隔将交叉编译器的路径加入到PATH有多种方法,这里介绍三种方法嵌入式Linux软件设计方法1直接添加到路径PATH中,但只在当前的终端窗口中有效:exportPATH=$PATH:/usr/local/arm/3.3.2/bin方法2修改/etc/profile文件:[对所有用户有效]sudovi/etc/profile在末尾添加:exportPATH=$PATH:/usr/local/arm/3.3.2/bin保存;立即使新的环境变量生效:(或者注销后重登录)source/etc/profile嵌入式Linux软件设计方法3(推荐这种方法)修改~/.bashrc文件[或/etc/bash.bashrc]:vi~/.bashrc在末尾添加:exportPATH=$PATH:/usr/local/arm/3.3.2/bin保存;立即使新的环境变量生效:(或者注销后重登录)source.bashrc再度用echo$PATH察看当前的环境变量,是否包含了ARM交叉编译器的路径,类似如下所示:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/arm/3.3.2/bin嵌入式Linux软件设计测试ARM交叉编译环境是否可以运行在终端键入:arm-linux-gcc-v嵌入式Linux软件设计在RedHat的第三张光盘上找到并拷贝以下两个程序拷贝:tftp-server-0.32-4.i386.rpmtftp-0.32-4.i386.rpm到家目录;执行命令安装:rpm–ivhtftp-server-0.32-4.i386.rpmrpm–ivhtftp-0.32-4.i386.rpm安装方法附录2:RedHat9下的TFTP服务器配置Linux系统中,默认情况下TFTP服务是未安装的。嵌入式Linux软件设计2.关闭防火墙①②③⑤④嵌入式Linux软件设计3.开启RedHat中的TFTP服务①②开启nfs服务后。才能启动tftp嵌入式Linux软件设计3.开启RedHat中的TFTP服务①③嵌入式Linux软件设计4.修改TFTP服务器的配置文件servicetftp{disable=nosocket_type=dgramprotocol=udpwait=yesuser=rootserver=/usr/sbin/in.tftpdserver_args=-s/tftpboot-cper_source=11cps=1002flags=IPv4}vi/etc/xinetd.d/tftptftp的目录-c指定了可以创建文件建立tftp目录:mkdir/tftpboot修改tftp目录权限:chmod777/tftpboot重新开启tftp服务:servicexinetdrestart嵌入式Linux软件设计附录3:ubuntu下的TFTP服务器配置ubuntu下可安装增强功能的TFTP服务器:tftpd-hpa(服务器端),tftp-hpa(客户端)2.确认已连网,安装:sudoapt-getinstalltftpd-hpatftp-hpa3.配置,tftpd-hpa的配置文件是/etc/default/tftpd-hpa文件内容:#/etc/default/tftpd-hpaTFTP_USERNAME="tftp"TFTP_DIRECTORY="/tftpboot"//这里设定tftpd-hpa的服务目录TFTP_ADDRESS="0.0.0.0:69"TFTP_OPTIONS="-l-c-s"//这里是给定的选项可能无需安装xinetd服务1.建立TFTP服务器目录:mkdir/tftpbootsudochmod777/tftpboot嵌入式Linux软件设计5.测试,预先在TFTP服务目录里建立一个test.txt文件#tftplocalhosttftp>gettest.txttftp>q//退出#ls用ls查看,当前目录应当有test.txt文件。tftplocalhosttftp>putxxxx.xxxtftp>q//退出#ls/tftpboot用ls查看,/tftpboot目录应当有xxxx.xxx文件。4.启动服务sudoservicetftpd-hparestart嵌入式Linux软件设计安装(先要保证网络链接):①在终端下执行命令:sudoapt-getinstallminicom②在新立得软件包管理器中搜索到"minicom",安装。配置:在使用minicom之前,要保证对串口有R/W的权限。串口COM1对应ttyS0,COM2对应ttyS1,…权限的确认:ls-l/dev/ttyS0crw-rw----1rootdialout4,652010-11-1008:30/dev/ttyS0附录4:ubuntu下的串口工具minicom安装配置嵌入式Linux软件设计运行串行终端程序sudominicom会提示输入登录密码,输入密码后进入终端。第一次运行,要进行参数设置,以后就可以直接使用。嵌入式Linux软件设计文件名和路径文件传输协议串口设置调制解调器和拨号屏幕和键盘设置保存为默认配置dfl设置保存为..退出按"Ctrl-A",再按"o"进入参数设置选择此项(也可在第一次运行时执行命令:minicom–s进入设置)嵌入式Linux软件设计按"Ctrl-A",再按"o"进入参数设置设置为ttyS0这里都设置为No设置好后在"Changewhichsetting?"处按回车键退出该菜单如果用USB-串口转接线,设置为ttyUSB0嵌入式Linux软件设计按"Ctrl-A",再按"o"进入参数设置这3个地方都设置为空设置好后在"Changewhichsetting?"处按回车键退出该菜单嵌入式Linux软件设计按"Ctrl-A",再按"o"进入参数设置最后保存重新启动串行终端,使当前配置生效。注意:非正常关闭minicom,会在/var/lock下创建几个LCK*文件,这几个文件会阻止minicom的运行,将其删除后即可恢复。嵌入式Linux软件设计串行终端控制组合键的用法:先按Ctrl+A组合键,然后松开这两个键,再按Z键会出现控制组合键的帮助文档。常用的组合键:S键:发送文件到目标系统中;W键:自动卷屏。C键:清除屏幕的显示内容;B键:浏览minicom的历史显示;X键:退出minicom,会提示确认退出。嵌入式Linux软件设计附录5:RamDisk文件系统的创建一、RamDisk文件系统嵌入式系统无硬盘,一般采用NOR型或NAND型的Flash保存代码和数据,这就要把系统内存划出一部分当作硬盘使用存储数据。由于这两种Flash的结构不一样,在其上构建的RamDisk操作方式自然也不一样,但是其构建的文件系统是一样的——RamDisk文件系统。在系统中构建一个RamDisk系统:mkdir/tmp/ramdisk0mke2fs/dev/ram0或mkfs-text2/dev/ram0mount/dev/ram0/tmp/ramdisk0系统重启后?嵌入式Linux软件设计但是,当系统启动时,还没有形成构建RamDisk的环境,又如何来构建呢?Linux的initrd机制:initrd=bootloaderinitializedRAMdisk就是由bootloader初始化的内存盘。在Linux内核启动前,bootloader会将Flash中的initrd文件加载到内存,内核启动时会在访问真正的根文件系统前先访问该内存中的initrd文件系统:①加载根文件系统存储介质的驱动模块;②执行真正的根文件系统中的/sbin/init进程。嵌入式Linux软件设计Linux2.4内核对Initrd的处理流程Linux2.4内核的initrd格式是文件系统镜像文件,处理流程如下:bootloader把内核以及/dev/initrd的内容加载到内存,/dev/initrd是由bootloader初始化的设备,存储着initrd。在内核初始化过程中,内核把/dev/initrd设备的内容解压缩并拷贝到/dev/ram0设备上。内核以可读写的方式把/dev/ram0设备挂载为原始的根文件系统。嵌入式Linux软件设计解决方案:RamDisk必须是一个小的linuxrootfs系统,它必须包含了除内核以外的所有Linux系统在引导和管理时需要的工具。一般包含如下目录:bin,dev,etc,home,lib,mnt,proc,sbin,usr,var基本的工具和运行库:/bin:sh,ls,cp,mv……,glibc必要的配置文件:/etc:inittab,rc,fstab……必要的设备文件:/dev/tty*,/dev/console,/dev/men……嵌入式Linux软件设计如何建立:RamDisk文件内包含有启动代码,所以不能直接用常规方式建立。嵌入式Linux软件设计二、busybox工具1.简介busybox是一个集成了一百多个最常用linux命令和工具的软件,还集成了http服务器和telnet服务器。我们用这个工具可以方便地生成嵌入式系统RanDisk的所需要的文件。。源代码下载:http://www.busybox.net/downloads/目前版本:busybox-1.18.0.tar.bz2本课程使用版本:busybox-1.9.2.tar.bz2交叉编译环境:arm-linux-gcc-3.4.1.tar.bz2嵌入式Linux软件设计解压busybox文件:tar-jxvfbusybox-1.9.2.tar.bz2将会解压到当前目录的busybox-1.9.2目录下。2.busybox工具的编译和安装修改Makefile中的174行的arch和编译工具ARCH?=armCROSS_COMPILE?=/usr/local/arm/3.4.1/bin/arm-linux-进入解压后的busybox目录,修改编译配置选项:makemenuconfig嵌入式Linux软件设计makemenuconfig的启动画面:嵌入式Linux软件设计编译配置选项:BusyboxSettings--->BuildOptions--->←编译为静态连接嵌入式Linux软件设计编译配置选项(续):BusyboxSettings--->BusyboxLibraryTuning--->嵌入式Linux软件设计编译配置选项(续):BusyboxSettings--->installationoption-->这里一定要选上,否则编译的内容会覆盖掉/usr的内容。嵌入式Linux软件设计编译配置选项(续):Coreutils--->此选项下为一些命令,可酌情选择嵌入式Linux软件设计编译配置选项(续):LinuxModuleUtilities--->嵌入式Linux软件设计编译配置选项(续):最后按esc键,在对话框中选"yes"保存设置退出。嵌入式Linux软件设计编译busybox:makemakeinstall在usybox-1.9.2/_install目录下会生成我们需要的文件嵌入式Linux软件设计三、构建RamDisk根文件系统的目录框架1.建立根文件系统结构mkdir/rootfscdrootfsmkdirbindevetclibprocmkdirsbintmpusrvarchmod1777tmpmkdirusr/binusr/libusr/sbinmkdirvar/libvar/lockvar/logmkdirvar/runvar/tmpchmod1777var/tmp根目录/├─/bin├─/dev├─/etc├─/lib├─/proc├─/sbin├─/tmp├─/usr│├─/bin│├─/lib│└─/sbin└─/var├─/lib├─/lock├─/log├─/run└─/tmp这里的rootfs目录是在home目录下的sun用户目录下建立的。当然也可以在你的用户目录下建立。嵌入式Linux软件设计2.拷贝文件和生成ramdisk.gz将主机/dev目录下的console,null,zero文件拷贝到/rootfs目录下的/dev目录;busybox生成的_install目录下的内容也拷贝到目录/rootfs接下来就要用dd指令,分块拷贝文件,再用mkfs指令建立文件系统,建立挂载点,挂载成一个磁盘,将/rootfs内容全部拷贝进去,卸载后再用gzip指令压缩成ramdisk.gz。嵌入式Linux软件设计3.对ramdisk的修改解压ramdisk.gz:gzip-dramdiak.gz建立一个挂载点:mkdirmnt/ram挂载成磁盘:mount-oloopramdisk/mnt/ram现在可以到/mnt/ram目录对ramdisk进行修改。再制作ramdisk.gz,先卸载磁盘:umount/mnt/ram压缩:gzipramdiskramdisk.gz这也给我们使用现成的ramdisk文件作模板,进行修改后快速形成需要的ramdisk提供了一个思路。嵌入式Linux软件设计附录6:ubuntu下网络文件系统(NFS)的安装配置安装:sudoapt-getinstallnfs-kernel-server编辑/etc/exports文件,在末尾加入:/tftpboot*(rw,sync,no_root_squash)允许所有的网段访问开放读写权限数据同步写入内存和硬盘NFS客户端使用共享目录的权限NFS共享的目录NFS(NetworkFileSystem):NFS允许一个系统在网络上与他人共享目录和文件,用户和程序可以像访问本地文件一样访问远端系统上的文件。嵌入式Linux软件设计重新启动NFS服务,或重启系统:sudo/etc/init.d/portmaprestart重启portmapsudo/etc/init.d/nfs-kernel-serverrestartshowmount-e显示本机共享目录在本机上测试挂载:sudomount-tnfslocalhost:/tftpboot/mnt取消:sudoumount/mnt如果用在嵌入式设备上挂载,可能要加上参数-onolock此参数不一定是必须给定的。嵌入式Linux软件设计本课程全部结束嵌入式Linux软件设计
本文档为【嵌入式Linux软件设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
正方体
暂无简介~
格式:ppt
大小:3MB
软件:PowerPoint
页数:84
分类:
上传时间:2022-05-11
浏览量:1