建立嵌入式Linux应用系统.ppt

上传人:牧羊曲112 文档编号:6280557 上传时间:2023-10-13 格式:PPT 页数:39 大小:374.32KB
返回 下载 相关 举报
建立嵌入式Linux应用系统.ppt_第1页
第1页 / 共39页
建立嵌入式Linux应用系统.ppt_第2页
第2页 / 共39页
建立嵌入式Linux应用系统.ppt_第3页
第3页 / 共39页
建立嵌入式Linux应用系统.ppt_第4页
第4页 / 共39页
建立嵌入式Linux应用系统.ppt_第5页
第5页 / 共39页
点击查看更多>>
资源描述

《建立嵌入式Linux应用系统.ppt》由会员分享,可在线阅读,更多相关《建立嵌入式Linux应用系统.ppt(39页珍藏版)》请在三一办公上搜索。

1、1,建立嵌入式Linux应用系统,2,概要,开发环境内核配置bootloader根文件系统系统配置和管理应用开发,3,开发环境,主机系统和目标机系统主机:x86,sparc,.开发板,评估板,用户定制系统嵌入式微处理器使用的体系结构x86,arm,ppc,mips,.主机操作系统Unix/Linux交叉编译工具链编译器,二进制工具集,Windows专用集成开发环境如:ADS,用于编译ARM体系结构的代码虚拟机VMware+Linux,其它内核或驱动程序开发内核源代码应用程序开发交叉编译工具集相关头文件和库函数,4,交叉编译工具集,交叉编译器gcc:编译器,将c程序转换成汇编程序as:汇编器,将

2、汇编程序转换成目标代码二进制工具(binutil)ld:连接器,将(多个)目标代码连接成一个目标代码或可执行代码nm:用于读取目标代码中的符号objcopy:可以将一种目标代码形式转换成另一种目标代码形式objdump:反汇编一个目标代码或可执行代码strip:从目标代码中去掉符号表.c库静态库:libc.a,libm.a,.动态库:libc.so,libm.so,ld.so,.,5,获得交叉编译工具集,GNU提供编译工具的源代码,用户可以自己建立交叉编译工具集。需要的源代码(可从GNU提供的众多镜像网站上得到)gcc:编译器binutils:二进制工具kernel:内核gdb:调试器glib

3、c:c库通常可以找到预编译好的交叉编译工具集编译器版本与内核版本有一定的关联大多来源于经验,无确定对应关系。如:ARM体系结构的交叉编译工具集http:/handhelds.org/download/projects/toolchain/,6,内核编译配置,预置选项可用命令make configmake menuconfigmake xconfig新增功能或模块增加预置选项arch/$(ARCH)/config.in直接修改相关Makefile文件,7,make menuconfig,8,make menuconfig,9,make menuconfig,10,例1:内核编译主要配置选项,Lo

4、adable module supportEnable loadable module supportKernel module loaderSystem type(S3C2410-based)ARM system typeSMDK(MERI TECH BOARD)change AIJIby threewater-1ARM920T CPU idleARM920T I-Cache onARM920T D-Cache onGeneral setup(0)Compressed ROM boot loader base address(0)Compressed ROM boot loader RSS

5、addressNetworking supportSystem V IPCSysctl supportNWFPE math emulation(ELF)Kernel core(/proc/kcore)formatKernel support for ELF binariesKernel-mode alignment trap handler,Networking optionsPacket socketPacket socket:mmapped IOUnix domain socketsTCP/IP networkingIP:multicastingCharacter devicesVirtu

6、al terminalUnix98 PTY supportS3C2410 Real Time ClockFile systemsKernel automounter version 4 supportYaffs filesystem on NANDCompressed ROM file system support/proc file system support/dev file system supportAutomatically mount at boot/dev/pts file system for Unix98 PTYsNetwork File SystemsNFS file s

7、ystem supportProvide NFSv3 client support,11,bootloader,bootloader:引导加载程序boot loader,bootstrap loader,bootstrap,.可能由多个程序接力完成引导加载过程作用只负责系统的启动引导作为系统监控程序各种Linux系统用bootloaderliloGRUBu-bootviviredboot,12,vivi,vivi是由韩国mizi公司设计为ARM处理器系列设计的一个bootloaderhttp:/vivi目前只支持使用串口和主机通信,所以必须使用一条串口电缆来连接目标板和主机。vivi最初的加载

8、需要使用JTAG端口主要功能flash管理和读写串口数据传输硬件初始化启动内核内置命令load:通过串口进行数据传输part:将flash进行分区param:显示和设置各种参数boot:启动各种应用,包括Linux内核flash:管理flash设备,13,编译vivi,配置:make config 或make menuconfig,编译:make 或make vivi,14,vivi bon part 0 128k 192k 1216k 4288k:m 64704k,mtd_partition_t default_mtd_partitions=name:vivi,offset:0,size:0

9、 x00020000,flag:0,name:param,offset:0 x00020000,size:0 x00010000,flag:0,name:kernel,offset:0 x00030000,size:0 x000C0000,flag:0,name:root,offset:0 x00100000,size:0 x00140000,flag:MF_BONFS;,128k,64k,1024k,3072k,60416k,vivi/arch/s3c2410/smdk.c,vivi,param,kernel,root,yaffs,15,u-boot,由DENX Software Engin

10、eering提供的引导加载程序,可支持多种微处理器。http:/arm,mips,i386,ppc,.u-boot提供多种功能flash以及SDRAM的管理和读写串口数据传输加载和启动内核或其它应用程序支持网络启动识别多种文件系统内置命令内置命令非常多,用户可根据需要进行裁减或添加。,16,cpu/$(CPU)/start.Su-boot的启动部分代码为汇编程序,.intdo_version(cmd_tbl_t*cmdtp,int flag,int argc,char*argv)extern char version_string;printf(n%sn,version_string);ret

11、urn 0;U_BOOT_CMD(version,1,1,do_version,version-print monitor versionn,NULL);.,u-boot-$(version)/common/command.c,u-boot命令实现,17,编译u-boot,配置:(例:s3c2410)make smdk2410_config,编译:make 或make u-boot.bin,18,根文件系统,Linux系统运行需要根文件系统根节点文件系统常用根文件系统cramfsromfsramdiskext2其它基于磁盘yaffs,.,19,根文件系统内容,drwxr-xr-x 2 root

12、 root 1024 Dec 2 2006 bindrwxr-xr-x 3 root root 2048 Mar 20 2006 devdrwxr-xr-x 6 root root 1024 Dec 2 2006 etcdrwxr-xr-x 2 root root 1024 Jul 5 2004 homedrwxr-xr-x 2 root root 1024 Jul 5 2004 libdrwxr-xr-x 3 root root 1024 Dec 2 2006 mntdrwxr-xr-x 2 root root 1024 Apr 4 2000 procdrwxr-x-2 root root

13、1024 Mar 20 2006 rootdrwxr-xr-x 2 root root 1024 Feb 5 2003 sbindrwxrwxrwt 2 root root 1024 Apr 4 2000 tmpdrwxr-xr-x 7 root root 1024 Jul 5 2004 usrdrwxr-xr-x 8 root root 1024 Apr 18 2003 var,20,lrwxrwxrwx 1 501 root 7 Apr 21 10:10 ash-busybox-rwxr-xr-x 1 501 root 385516 Apr 21 10:10 busyboxlrwxrwxr

14、wx 1 501 root 7 Apr 21 10:10 cat-busyboxlrwxrwxrwx 1 501 root 7 Apr 21 10:10 chgrp-busyboxlrwxrwxrwx 1 501 root 7 Apr 21 10:10 chmod-busyboxlrwxrwxrwx 1 501 root 7 Jan 1 1970 chown-busyboxlrwxrwxrwx 1 501 root 7 Jan 1 1970 cp-busyboxlrwxrwxrwx 1 501 root 7 Jan 1 1970 date-busyboxlrwxrwxrwx 1 501 roo

15、t 7 Jan 1 1970 dd-busybox,/bin,-rwxr-xr-x 1 501 root 14180 Apr 21 10:19 cardctl-rwxr-xr-x 1 501 root 44368 Apr 21 10:19 cardmgr-rwxr-xr-x 1 501 root 54476 Apr 21 10:19 depmod-rwxr-xr-x 1 501 root 82172 Apr 21 10:19 fdisklrwxrwxrwx 1 501 root 14 Jan 1 1970 freeramdisk-./bin/busybox-rwxr-xr-x 1 501 ro

16、ot 53572 Jan 1 1970 ftpd-rwxr-xr-x 1 501 root 11880 Jan 1 1970 fuserlrwxrwxrwx 1 501 root 14 Jan 1 1970 getty-./bin/busyboxlrwxrwxrwx 1 501 root 14 Jan 1 1970 halt-./bin/busybox-rwxr-xr-x 1 root root 41781 Jan 1 1970 hciconfig-rwxr-xr-x 1 root root 61572 Jan 1 1970 hcid-rwxr-xr-x 1 root root 41502 J

17、an 1 1970 hcitool-rwxr-xr-x 1 501 root 1818 Jan 1 1970 hotpluglrwxrwxrwx 1 501 root 14 Jan 1 1970 ifconfig-./bin/busybox,/sbin,21,lrwxrwxrwx 1 501 root 17 Apr 21 10:27-././bin/busyboxlrwxrwxrwx 1 501 root 17 Apr 21 10:27 basename-././bin/busyboxlrwxrwxrwx 1 501 root 17 Apr 21 10:27 bunzip2-././bin/b

18、usyboxlrwxrwxrwx 1 501 root 17 Apr 21 10:27 bzcat-././bin/busyboxlrwxrwxrwx 1 501 root 17 Jan 1 1970 chvt-././bin/busyboxlrwxrwxrwx 1 501 root 17 Jan 1 1970 clear-././bin/busyboxlrwxrwxrwx 1 501 root 17 Jan 1 1970 cmp-././bin/busyboxlrwxrwxrwx 1 501 root 17 Jan 1 1970 cut-././bin/busyboxlrwxrwxrwx 1

19、 501 root 17 Jan 1 1970 deallocvt-././bin/busybox,/usr/bin,lrwxrwxrwx 1 501 root 17 Apr 21 10:34 chroot-././bin/busybox-rwxr-xr-x 1 root 232 4092 Apr 21 10:34 dongle_attach-rwxr-xr-x 1 root root 17332 Apr 21 10:34 imagewrite-rwxr-xr-x 1 501 root 9164 Apr 21 10:34 imagewrite5-rwxr-xr-x 1 root 232 119

20、16 Jan 1 1970 irattach-rwxr-xr-x 1 root root 9726 Jan 1 1970 irdaping-rwxr-xr-x 1 root root 6437 Jan 1 1970 irnetd,/usr/sbin,22,ramdisk,内核支持CONFIG_BLK_DEV_INITRD=ydrivers/block/rd.c使用只在系统启动过程中使用加载额外的设备驱动程序等作为系统根文件系统制作见:文件系统和网络系统,例1。将根文件系统内容拷贝到ramdisk中。,23,cramfs,内核支持CONFIG_CRAMFS=yfs/cramfs使用只读文件系统通

21、常作为嵌入式系统的根文件系统特点文件大小不能超过16MB文件系统大小最大只有256MB(可以稍微超过一点)只能使用4096字节大的磁盘块字节顺序与制作主机使用的字节顺序相同制作工具:mkcranfs,cramfsckhttp:/,24,busybox,专门为嵌入式系统或其它袖珍型系统开发的多功能系统工具,常被称为嵌入式系统上的瑞士军刀。http:/可实现大多数常用unix或linux命令符合unix命令使用习惯特性用一个可执行文件实现多种命令功能针对嵌入式系统的应用尽量小的代码尺寸去掉不常用的命令选项用户可根据需要配置和裁剪busybox有很好的可移植性,25,使用busybox命令,Busy

22、box将unix命令作为参数,进而执行相应功能。如:$busybox ls-l/proc,为符合unix命令的使用习惯,通常将unix命令作为符号链接指向busybox。这时可以直接使用符号链接形式的命令直接调用busubox。,26,配置和编译busybox,$make menuconfig,27,busybox命令实现,struct BB_applet const char*name;int(*main)(int argc,char*argv);enum Location location:4;enum SUIDRoot need_suid:4;,include/busybox.h:str

23、uct BB_applet,busybox中把每个命令称为一个applet,并用一个BB_applet类型的数据结构表示。,28,const struct BB_applet applets=#define APPLET(a,b,c,d)#a,b,c,d,#define APPLET_NOUSAGE(a,b,c,d)a,b,c,d,#define APPLET_ODDNAME(a,b,c,d,e)a,b,c,d,#ifdef CONFIG_TEST APPLET_NOUSAGE(,test_main,_BB_DIR_USR_BIN,_BB_SUID_NEVER)#endif#ifdef CON

24、FIG_ADDGROUP APPLET(addgroup,addgroup_main,_BB_DIR_BIN,_BB_SUID_NEVER)#endif#ifdef CONFIG_ADDUSER APPLET(adduser,adduser_main,_BB_DIR_BIN,_BB_SUID_NEVER)#endif.;,include/applets.h:applets,所有配置时选中的命令保存在applets数组中,数组中的元素为BB_applet类型的数据结构。,29,int main(int argc,char*argv)const char*s;bb_applet_name=argv

25、0;if(bb_applet_name0=-)bb_applet_name+;for(s=bb_applet_name;*s!=0;)if(*s+=/)bb_applet_name=s;run_applet_by_name(bb_applet_name,argc,argv);bb_error_msg_and_die(applet not found);,applets/busybox.c:main(),busybox的main函数,30,void run_applet_by_name(const char*name,int argc,char*argv)static int recurse_l

26、evel=0;extern int been_there_done_that;/*From busybox.c*/./*Do a binary search to find the applet entry given the name.*/if(applet_using=find_applet_by_name(name)!=NULL)bb_applet_name=applet_using-name;if(argv1.,applets/applet.c:run_applet_by_name(),run_applet_by_name(),31,系统配置和管理,内核启动init进程,static

27、int init(void*unused)lock_kernel();.unlock_kernel();./*We try each of these until one succeeds.*The Bourne shell can be used instead of init if we are*trying to recover a really broken machine.*/if(execute_command)execve(execute_command,argv_init,envp_init);execve(/sbin/init,argv_init,envp_init);exe

28、cve(/etc/init,argv_init,envp_init);execve(/bin/init,argv_init,envp_init);execve(/bin/sh,argv_init,envp_init);panic(No init found.Try passing init=option to kernel.);,init/main.c:init(),linuxrc,32,/sbin/init程序执行过程,系统的init程序根据配置文件/etc/inittab配置操作系统并进而启动各种系统级应用。用户可通过修改配置文件inittab改变系统启动参数。,#Default runl

29、evel.The runlevels used by RHS are:#0-halt(Do NOT set initdefault to this)#1-Single user mode#2-Multiuser,without NFS(The same as 3,if you do not have networking)#3-Full multiuser mode#4-unused#5-X11#6-reboot(Do NOT set initdefault to this)#id:3:initdefault:#System initialization.si:sysinit:/etc/rc.

30、d/rc.sysinitl0:0:wait:/etc/rc.d/rc 0l1:1:wait:/etc/rc.d/rc 1l2:2:wait:/etc/rc.d/rc 2l3:3:wait:/etc/rc.d/rc 3l4:4:wait:/etc/rc.d/rc 4l5:5:wait:/etc/rc.d/rc 5l6:6:wait:/etc/rc.d/rc 6.,/etc/inittab,33,rc.sysinit,rc.sysinit是一个shell脚本,负责启动各种基本系统功能:将启动过程记入系统日志启动网络功能启动控制台,设定字体加载/proc文件系统设定内核参数设置时钟设置主机名加载各种

31、模块加载各种磁盘文件系统启动网络系统根据系统运行级别启动相应的服务器程序/etc/rc.d/rc0.drc6.d用户可使用chkconfig命令配置服务器启动选项,34,rc.local,rc.local也是一个shell脚本,主要用于用户启动各种用户自己设定的启动程序或命令,这些程序或命令在系统启动时将会被自动执行。rc.local在所有其它初始化脚本执行完后才执行。,#!/bin/sh#This script will be executed*after*all the other init scripts.#You can put your own initialization stuf

32、f in here if you dont#want to do the full Sys V style init stuff.touch/var/lock/subsys/local#added by liyi/sbin/ifconfig,例:rc.local,35,重要系统配置文件,/etc/inittab/etc/fstab/etc/resolv.conf/etc/xinetd.d/*/etc/securetty/etc/logrotate.conf/etc/hosts,hosts.allow,hosts.deny/etc/exports/etc/security/*/etc/X11/X

33、F86Config/etc/sysconfig/*,36,例2:rc3.d,K05saslauthd K36lisa S05kudzu S17keytable S56rawdevices S95atdK15httpd K45named S08iptables S20random S56xinetd S97rhnsdK20nfs K50snmpd S09isdn S24pcmcia S85gpm S99localK24irda K50snmptrapd S10network S25netfs S90crondK30sendmail K50vsftpd S12syslog S26apmd S90c

34、upsK35smb K74ntpd S13portmap S28autofs S90 xfsK35winbind K95firstboot S14nfslock S55sshd S95anacron,S99local-./rc.local.K15httpd-./init.d/httpd,S dd name S:start,系统启动时执行的脚本 dd:00-99,数值小则先被系统执行 name:init.d目录中对应的脚本名称,K dd name K:kill,系统退出时执行的脚本 dd:00-99,数值小则先被系统执行 name:init.d目录中对应的脚本名称,37,应用程序开发和调试,程序

35、编译交叉编译环境使用静态连接还是动态连接库应用程序调试基于Linux系统的调试方法gdbgdbserverhttp:/其它调试方法JTAG,.,38,使用gdb和gdbserver调试程序,主机gdb,目标机gdbserver,网络/串口,#gdbserver:4567 myprogProcess myprog created;pid=678Killing inferior#,$gdbGNU gdb Red Hat Linux.(gdb)target remote:4567Remote debugging using 192.168.1.12:45670 x40000be0 in?()(gdb)运行各种调试命令(gdb)q$,39,关于考试,50分范围内存:管理,寻址进程:基本概念,创建,调度,.中断、定时、系统调用:基本概念文件系统:ext2文件系统,基本概念,结构设备驱动程序:基本概念,结构,.,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号