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

上传人:wuy****n92 文档编号:91994164 上传时间:2023-05-29 格式:PPT 页数:39 大小:374.32KB
返回 下载 相关 举报
建立嵌入式Linux应用系统.ppt_第1页
第1页 / 共39页
建立嵌入式Linux应用系统.ppt_第2页
第2页 / 共39页
点击查看更多>>
资源描述

《建立嵌入式Linux应用系统.ppt》由会员分享,可在线阅读,更多相关《建立嵌入式Linux应用系统.ppt(39页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

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

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

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

4、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 addressNetworking supportSys

5、tem V IPCSysctl supportNWFPE math emulation(ELF)Kernel core(/proc/kcore)formatKernel support for ELF binariesKernel-mode alignment trap handlerNetworking optionsPacket socketPacket socket:mmapped IOUnix domain socketsTCP/IP networkingIP:multicastingCharacter devicesVirtual terminalUnix98 PTY support

6、S3C2410 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 system supportProvide NFSv3 cl

7、ient support10bootloaderbootloader:引导加载程序boot loader,bootstrap loader,bootstrap,.可能由多个程序接力完成引导加载过程作用只负责系统的启动引导作为系统监控程序各种Linux系统用bootloaderliloGRUBu-bootviviredboot11vivivivi是由韩国mizi公司设计为ARM处理器系列设计的一个bootloaderhttp:/vivi目前只支持使用串口和主机通信,所以必须使用一条串口电缆来连接目标板和主机。vivi最初的加载需要使用JTAG端口主要功能flash管理和读写串口数据传输硬件初始化

8、启动内核内置命令load:通过串口进行数据传输part:将flash进行分区param:显示和设置各种参数boot:启动各种应用,包括Linux内核flash:管理flash设备12编译vivi配置:配置:make config 或或make menuconfig编译:编译:make 或或make vivi13vivi bon part 0 128k 192k 1216k 4288k:m 64704kmtd_partition_t default_mtd_partitions=name:vivi,offset:0,size:0 x00020000,flag:0,name:param,offse

9、t: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;128k64k1024k3072k60416kvivi/arch/s3c2410/smdk.cvivi paramkernelrootyaffs14u-boot由DENX Software Engineering提供的引导加载程序,可支持多种微处理器。http:/arm,mips,i386,p

10、pc,.u-boot提供多种功能flash以及SDRAM的管理和读写串口数据传输加载和启动内核或其它应用程序支持网络启动识别多种文件系统内置命令内置命令非常多,用户可根据需要进行裁减或添加。15cpu/$(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);return 0;U_BOOT_CMD(version,1,1,do_versio

11、n,version-print monitor versionn,NULL);.u-boot-$(version)/common/command.cu-boot命令实现命令实现16编译u-boot配置:配置:(例:例:s3c2410)make smdk2410_config编译:编译:make 或或make u-boot.bin17根文件系统Linux系统运行需要根文件系统根节点文件系统常用根文件系统cramfsromfsramdiskext2其它基于磁盘yaffs,.18根文件系统内容drwxr-xr-x 2 root root 1024 Dec 2 2006 bindrwxr-xr-x 3

12、 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 1024 Mar 20 2006 rootdrwxr-xr-x 2 roo

13、t 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 var19lrwxrwxrwx 1 501 root 7 Apr 21 10:10 ash-busybox-rwxr-xr-x 1 501 root 385516 Apr 21 10:10 busyboxlrwxrwxrwx 1 501 root 7 Apr 21 10:10 cat-busybo

14、xlrwxrwxrwx 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 root 7 Jan 1 1970 dd-busybox/bin-rwxr-xr-x

15、 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 root 53572 Jan 1 1970 ftpd-rwxr-xr-x 1 501

16、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 Jan 1 1970 hcitool-rwxr-xr-x 1 501 root 18

17、18 Jan 1 1970 hotpluglrwxrwxrwx 1 501 root 14 Jan 1 1970 ifconfig-./bin/busybox/sbin20lrwxrwxrwx 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/busyboxlrwxrwxrwx 1 501 root 17 Apr 21 10:27

18、 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 501 root 17 Jan 1 1970 deallocvt-././bin/b

19、usybox/usr/binlrwxrwxrwx 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 11916 Jan 1 1970 irattach-rwxr-xr-x 1 root root

20、9726 Jan 1 1970 irdaping-rwxr-xr-x 1 root root 6437 Jan 1 1970 irnetd/usr/sbin21ramdisk内核支持CONFIG_BLK_DEV_INITRD=ydrivers/block/rd.c使用只在系统启动过程中使用加载额外的设备驱动程序等作为系统根文件系统制作见:文件系统和网络系统,例1。将根文件系统内容拷贝到ramdisk中。22cramfs内核支持CONFIG_CRAMFS=yfs/cramfs使用只读文件系统通常作为嵌入式系统的根文件系统特点文件大小不能超过16MB文件系统大小最大只有256MB(可以稍微超过一点

21、)只能使用4096字节大的磁盘块字节顺序与制作主机使用的字节顺序相同制作工具:mkcranfs,cramfsckhttp:/ ls-l/proc 为符合unix命令的使用习惯,通常将unix命令作为符号链接指向busybox。这时可以直接使用符号链接形式的命令直接调用busubox。25配置和编译busybox$make menuconfig26busybox命令实现struct BB_applet const char*name;int(*main)(int argc,char*argv);enum Location location:4;enum SUIDRoot need_suid:4;

22、include/busybox.h:struct BB_appletbusybox中把每个命令称为一个applet,并用一个BB_applet类型的数据结构表示。27const 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_NEVE

23、R)#endif#ifdef CONFIG_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类型的数据结构。28int main(int argc,char*argv)const char*s;bb_a

24、pplet_name=argv0;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函数29void run_applet_by_name(const char*name,int argc,char*argv)static in

25、t recurse_level=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&strcmp(argv1,-help)=0)if(strcmp(applet_using-name,busybox)=0)if(argv2)applet_u

26、sing=find_applet_by_name(argv2);else applet_using=NULL;if(applet_using)bb_show_usage();been_there_done_that=1;busybox_main(0,NULL);exit(*(applet_using-main)(argc,argv);.applets/applet.c:run_applet_by_name()run_applet_by_name()30系统配置和管理内核启动init进程static int init(void*unused)lock_kernel();.unlock_kerne

27、l();./*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);execve(/etc/init,argv_init,envp_init);execve(/bin/

28、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()linuxrc31/sbin/init程序执行过程系统的init程序根据配置文件/etc/inittab配置操作系统并进而启动各种系统级应用。用户可通过修改配置文件inittab改变系统启动参数。#Default runlevel.The runlevels used by RHS are:#0-halt(Do NOT set

29、 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.d/rc.sysinitl0:0:wait:/etc/rc.d/rc 0l1:1:wait:/etc/rc

30、.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/inittab32rc.sysinitrc.sysinit是一个shell脚本,负责启动各种基本系统功能:将启动过程记入系统日志启动网络功能启动控制台,设定字体加载/proc文件系统设定内核参数设置时钟设置主机名加载各种模块加载各种磁盘文件系统启动网络系统根据系统运行级别启动相应的服务器程序/etc/rc.d/rc0.drc6.d用

31、户可使用chkconfig命令配置服务器启动选项33rc.localrc.local也是一个shell脚本,主要用于用户启动各种用户自己设定的启动程序或命令,这些程序或命令在系统启动时将会被自动执行。rc.local在所有其它初始化脚本执行完后才执行。#!/bin/sh#This script will be executed*after*all the other init scripts.#You can put your own initialization stuff in here if you dont#want to do the full Sys V style init st

32、uff.touch/var/lock/subsys/local#added by liyi/sbin/ifconfig例:例:rc.local34重要系统配置文件/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/XF86Config/etc/sysconfig/*35例2:rc3.dK05saslauthd K36lisa S05kudz

33、u S17keytable S56rawdevices S95atdK15httpd K45named S08iptables S20random S56xinetd S97rhnsdK20nfs K50snmpd S09isdn S24pcmcia S85gpm S99localK24irda K50snmptrapd S10network S25netfs S90crondK30sendmail K50vsftpd S12syslog S26apmd S90cupsK35smb K74ntpd S13portmap S28autofs S90 xfsK35winbind K95firstb

34、oot S14nfslock S55sshd S95anacronS99local-./rc.local.K15httpd-./init.d/httpdS dd name S:start,系统启动时执行的脚本,系统启动时执行的脚本 dd:00-99,数值小则先被系统执行,数值小则先被系统执行 name:init.d目录中对应的脚本名称目录中对应的脚本名称K dd name K:kill,系统退出时执行的脚本,系统退出时执行的脚本 dd:00-99,数值小则先被系统执行,数值小则先被系统执行 name:init.d目录中对应的脚本名称目录中对应的脚本名称36应用程序开发和调试程序编译交叉编译环境

35、使用静态连接还是动态连接库应用程序调试基于Linux系统的调试方法gdbgdbserverhttp:/其它调试方法JTAG,.37使用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$38关于考试50分范围内存:管理,寻址进程:基本概念,创建,调度,.中断、定时、系统调用:基本概念文件系统:ext2文件系统,基本概念,结构设备驱动程序:基本概念,结构,.39

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁