《基于CF卡的linux系统制作精品资料.doc》由会员分享,可在线阅读,更多相关《基于CF卡的linux系统制作精品资料.doc(23页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 在CF卡上安装嵌入式linux全过程 吴刚 2007-4-4摘要:本文主要介绍在一块128M的CF卡上定制安装linux操作系统,并在此基础上建立一个简单的应用平台。关键词:extlinux,busybox, CF卡,嵌入式linux随着信息技术和网络技术的高速发展,嵌入式技术的广泛应用,嵌入式系统已经打破传统PC工业的垄断地位,成为非PC设备的主体。而作为嵌入式系统,应用环境通常比较恶劣,而应用又比较简单,为保证系统的稳定性和便携性通常使用DOM卡或CF卡一类的存储设备来代替硬盘。经过一段时间的摸索和收集资料终于在一块CF卡上实践安装了一个满足特定需要的嵌入式linux系统,这里取名为cf
2、linux.在这里首先要感谢babylinux制作全过程的作者,正是这片文章,为我制作cflinux指明了道路。本文将讲述在一张容量为128M的CF卡上定制安装嵌入式linux操作系统的详细过程,一 主机和目标机情况简介 主机: Linux:Red Hat 9.0Kernel: 2.4.20 目标机: 基于X86的工控板二 cflinux简介cflinux是一运行于CF卡上的经过自定义剪裁的嵌入式linux操作系统。因其运行于CF卡上,故取名为cflinux.当此操作系统和应用环境搭建好后可以通过网络telnet和串口访问目标板,可运行QT/E图形界面应用程序。可以通过串口,网口和USB口和外
3、围设备交互。既可作为嵌入式操作系统,也可作为启动盘作为系统维护工具。三 linux得引导过程简介 在系统启动时,主板上的BIOS会读取硬盘的主引导记录(MBR),MBR中存放的是一段很小的程序,他的功能是从硬盘读取操作系统核心文件并运行,因为这个程序太小了,因此通常这个小程序不具备直接引导系统内核的能力,他先区引导另一个稍微大一点的小程序去引导系统内核。在linux系统中这样得小程序有LILO,GRUB和SYSLINUX等。我们在这个项目中这里用到的引导程序是SYSLINUX得一个分支:EXTLINUX。 Linux系统内核被引导程序装进内存并运行后,linux内核会检测系统中得各种硬件,并做
4、好硬件得初始化工作,使他们在系统正式运行后能正常工作。剩下就是linux内核要做得最后一个工作:运行/sbin下得init程序。Init是英文单词(initialization)初始化得简称,init程序得工作是读取/etc/inittab文件中的指令,对系统的各种软硬件环境做最初的初始化工作,最后运行gettty活mingetty等待用户输入用户名和密码(当然根据需要也可以跳过登录这个步骤,直接以root身份登录)。所有的工作就是这么简单。明白了这个道理,你也可以写一些脚本程序让他在系统启动时的特定时间完成运行,完成你指定的任务。/sbin/init程序只是系统默认的运行的第一个程序,他可以
5、是一个二进制程序也可以是一段bash脚本,一个指向另一个程序的链接。他的位置也并不一定在/sbin下,只要启动内核时加上init参数节能被运行,开始时给内核加上init/bin/sh参数,内核就能直接运行时并给出提示符,不需要登陆。四 extlinux安装 EXTLINUX是SYSLINUX的一个新的派生。可以从linux系统的ext2和ext3文件系统启动。EXTLINUX使用和SYSLINUX相似,只需做一点改动即可。首先从http:/www.kernel.org/pub/linux/utils/boot/syslinux/ 上下载syslinux-3.20.tar.gz。cp sysli
6、nux-3.20.tar.gz /usr/tmp tar xzvf syslinux-3.20.tar.gz 进行解压。然后用IDE to CF转接卡把CF卡连到主机上(注意:一般CF卡是不支持热插拔的,故插上CF后一般需要重新启动主机系统)。我的CF卡对应的设备文件是hdd1.在这里先使用fdisk工具把CF卡分成两个区,一个用于存放内核和randisk,另一个用于存放应用程序及相关文件。Fdisk的使用可参见相关资料,这里不做详细说明。我的CF卡主分区为hdd1,扩展分区为hdd2,将所有的扩展分区都分给逻辑分区hdd5。分好区后,将hdd1 和 hdd5格式化为ext2系统mke2fs
7、m 0 /dev/hdd1mke2fs m 0 /dev/hdd5 /-m 0参数的作用是告诉系统不为root保留空间一切准备好后,就可以安装EXTKINUX了,安装步骤如下:mount t auto /dev/hdd1 /mntcd /usr/tmp/syslinux-3.20/extlinux./extlinux i /mnt安装成功后会提示extlinux 成功安装到/mnt,然后在/mnt目录下会出现extlinux.sys文件。umount /mnt 至此extlinux已经安装完毕,可以把CF卡插到工控板上,上电启动一下看看有什么效果。如果安装成功的话,启动后会出现如下的提示: E
8、XTLINUX 3.20 2006-08-06 EBIOS Copyright (c) 1994-2005 H.peter Anvin Could not finf kernel image:linux boot:注:关于extlinux的详细使用方法,请参阅syslinux-3.20目录下的extlinux.doc文件五 linux内核编译 在内核编译前,我们首先要明确你需要内核支持什么样的硬件,支持多少种分区类型和文件系统,支持那些网卡,支持那些网络协议等等。虽然现在有128兆的空间,但也不能什么都要,够用就行啊。好了,现在开始内核的编译工作。首先准备好内核代码,可以到官方网站上下载,我的
9、内核源码是安装linux时带上的,在/usr/src/linux-2.4/目录下。 cd /usr/src/linux-2.4 make mrproper 清理源码树 make menuconfig然后对各项取舍如下:(至于具体配置项的意义,请参考相关资料,不在本文讨论范围之内)code maturity level options先不选,当我们配置好常规的东西,要加入framebuffer支持时再将这一项选上。因为在2.4.20版本中,对frambuffer的支持尚属于试验性代码,如果不选择此项将不能配置frambuffer.Load module support取消选择此项,为了简化系统的
10、制作,这个项目中将不选择可加载内核模块的支持。Processer type and featuresProcessor family中选择你需要的cpu类型,如果你想让老至386,新到p4的CPU都能运行cflinux的话,请选择386,否则根据实际情况来选择。建议选386。General setupNetworking support 都选上PCI支持 选上,除非你不用PCI设备,不过一般人都要的,因为大部分的网卡都是PCI的。System V ipc 选上Systrl support选上Kernel support for ELF 选上其他内容如果没什么特殊需要,都不选。Memory te
11、chnology devices(MTD) 不选Parallel port support 由于本项目中需要使用并口打印机,故将此项选上Plug and play configuration 不选Block devices Normal floppy disk support 不选Loopback device supportRAM disk supportInitial RAM disk(initrd)supportPer partion statics in /proc/partions以上几项都选上。由于这几项比较重要这里做详细说明。Loopback device 即回环设备,我们平时用
12、的命令瓜子ramdisk或光盘镜像时都用到回环设备。如:mount o loop ramdisk.img /mntRAM disk support 即内存磁盘(比较贴切的说法是虚拟磁盘,即拨出一部分内存当磁盘用)。本项目中将所有系统的的文件都做成ramdisk,所以在运行时你在根文件系统上所作的操作都是在内存中完成的,但形式上和在真正的磁盘上运行一样。只不过放在RAM disk上的所有内容会在系统关闭后全部消失。不仅在运行cflinux时用到ramdisk,我们在制作根文件系统时也用到ramdisk。学习ramdisk的使用也是制作cflinux的重要目标之一。在linux中还支持另外一种虚拟
13、磁盘:shm.(shared memory),这种要虚拟磁盘机制比ramdisk更加先进。Ramdisk的大小是固定的,由编译内核时的default ram disk size决定,默认为4096K,因为本项目中要往ramdisk中放很多东西,故这里我们要将其改为8192K(8M)。也可以在内核加载钱加上ramdisk_size=参数来决定他的大小,但系统一启动,ramdisk的大小是不能改变的,而shm的大小却是动态改变的。默认情况下为物理内存的一半,当系统需要更多内存的时候,他就自动缩小。系统内存富余时,他又会自动增大,这样可以充分灵活的利用内存空间,shm通常作为磁盘的高速缓存,放在系统
14、运行中的临时文件等。既然shm这么好,为什么这里还使用ramdisk呢,因为ramdisk可以很方便的在系统启动时加载,而shm则没那么容易。Initial RAM disk(initrd)support即初始化ramdisk支持,这个选项让内核有能力在内核加载阶段就能装入RAMDISK,并运行其中的内容。否则只能在系统运行阶段用ramdisk,我们平时编译了一个内核后,如果你的根文件系统用的是ext3,而你没有把ext编译进内核,而作为一个模块编译了,那么就需要用mkinitrd命令做一个initrd,这个ramdisk里放了ext3的模块,这样内核在加载根文件系统前就能正确识别ext3系统
15、,否则内核加载的最后一步就会出现kernel panic cant not find init.的错误。Per partion statics in /proc/partions这个选项不是必须的,但是不把这个选项编译进内核在执行fdisk指令时就会提示找不到/proc/partions,另外还可能出现不能以简写的挂载命令来挂载文件系统。所以我把该选项也编译进内核。Multidevice support(RAID and LVM) 不选Cryptography support(CryptoAPI) 不选Networking options在这一大项中需要把下列项目编译进内核:Packet so
16、cket:mmapped IOTCP/IP networking对于IP:advanced router 这项,如果你想重点把cflinux用做静态路由软件,那么把这项编译进去。另外unix domain sockets 这项也不必选择,只有运行X的情况下才需要这项。Telephony support 不选ATA/IDE/MFM/RLL support 选上,然后在下面的“IDE,ATA and ATAPI Block Devices”按钮就被激活,下面几项选上,其余都不用选Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy supportInclude I
17、DE/ATA-2 DISK supportAuto-Geometry Resizing supportInclude IDE/ATA CDROM supportSCSI support 因为这个项目中是通过CF卡启动的,所以把这项也选上。在这个大项中只需选择一下3项即可:SCSI disk supportSCSI generic supportSCSI tape supportFusion MPT device support 不选IEEE1394(FireWrite)support 不选I2O device support 选上,子项全部选上Network device support 选上
18、,这样就可以支持网卡了,其余都选择N.然后点Ethernet(10 or 100 Mbit)按钮选择你需要的网卡驱动,你可以把最常见的几种Reltek8139,NE2000,3COM等网卡编译进内核.虽然网卡的驱动通常都很小 如果你发现你需要的网卡是灰色的,不能点,那么先确定他上一级的选项已经点了,比如你想选NE2000的网卡,就必需先选择ELSA,VLB,PCI and on board controllers.如果还不能点,那么请确定是否已经把PCI的支持选项选上了,(在Geneal setup)里.没有PCI的支持,PCI的网卡将不能选. Amateur Radio support 不选
19、 IrDA (infrared) support 不选 ISDN subsystem 不选 Old CD-ROM drivers (not SCSI,not IDE) 不选Import core support 因为本项目中要使用到键盘和鼠标,所以选上该项,其子项也全部选中。然后把Horizontal screen resoulution 改为 800,vertial scrren resoulution 改为600。Character devices 这一项和block devices一样重要,这里将作重点讲述。如果要在终端上显示系统信息就必须将virtual terminal 和suppo
20、rt for console on virtual terminal 选上。因为本项目中防治系统信息覆盖掉QT的图形界面,所以没选这两项。接下来就是对串口的指出。因为本项目中需要通过串口和并口与设备交互,故下面几项都要选上:Standard (gtneric18250/16550 and compatible UARTs)serial supportSupport for console serial portExtended dumb serial driver optionsSupport special multport boardsNon-standard serial port su
21、pportUnix98 PTY support(telnetd 服务用到)Parallel printer supportSupport for console on line printerSupport for user-space parallel device drivers哈哈,下面的文件系统可是个重头戏哦,配置完这一项,整个内核配置也基本急速了。选上下面几个常用的文件系统选项: Kernel auto mounter support Kernel automounter version 4 support DOS FAT fs support MSDOS fs support UM
22、SDOS:unixlike file system on top of standard MSDOS VFAT fs support EFS file system support/proc file system support 少了他很多软件和命令都不能运行/dev/pts file system for unix98 PTYs telnetd服务用到ROM file system supportSecond extended fs support cflinux的基本文件系统最后是console drivers这是linux在字符模式下高分辨率显示的内核模块,前面三个子项都选上。Fram
23、e-buffer support 按钮是灰色的不能选,别急,回到第一个大项,选上他,然后在Frame-buffer support的子项中选上Support for framebuffer devicesVESA VGA granphics console你也可以选择其他的显卡驱动,比如nVida的,但是VESA和VGA是通用性最好的,只要不是几十年前的黑白卡,都兼容VESA和VGA。Support only 8 pixels wide fonts这个一定要选,否则当你给内核传递vga=768参数,让linux在字符界面下高分辨率显示的时候,系统会因为找不到合适的字体而返回低分辨率模式。好了,
24、所有的内核配置到这里就全部结速了,剩下的几个大项全部不用选。保存退出。make depmake baImage编译好的内核放在:/usr/src/linux-2.4.20-8/arch/i386/boot目录下将其拷贝到CF卡的主分区上:mount /dev/hdd1 /mntcp /usr/src/linux-2.4.20-8/arch/i386/boot/bzImage /mnt到此为止我们已经安装好了extlinux和内核编译,现在就可以试试刚编译的内核是否能启动了。不过首先要在bzImage所在的目录建立extlinux.conf配置文件,告诉extlinux在哪里寻找内核和ramdi
25、sk。extlinux.conf的格式如下:default emblinuxdisplay logo.txtlabel emblinuxkernel bzImageappend root=/dev/hdc1 initrd=ramdisk.img ide=nodma vga=0x0314保存即可。注:在工控板上cf卡对应的设备是hdc所以这里用root=/dev/hdc1 指明根文件系统所在initrd=ramdisk.img 指明ramdisk名称。ide=nodma 告诉内核不使用DMA控制器,这是针对CF卡的一个选项。vga=0x0314 指明分辨率为800600执行 umount /mn
26、t 卸载CF卡,然后将CF卡插到工控板上上电启动,看看是不是能看到系统内核启动信息了啊。六 编译busybox1 busybox简介 Busybox是一个集成一百多个最长用的linux命令和工具的软件,他甚至还集成了http服务器、dhcp服务器和telnet服务器,而所有这些功能却只有1M左右的大小。我们平时用的那些linux命令就好比分离的电子元件,而busybox就好比是一个集成电路,把常用的工具和命令集成压缩在一个可执行的文件里,功能基本不变,而大小却小很多倍,在嵌入式式linux中使用非常广泛。现在最新的busybox版本是1.5.0可以从busybox的官方网站上下载得到: Bus
27、ybox的小身材大作用的特性,给制作嵌入式linux带来了极大的方便。2 busybox的用法 可以这样用busybox #busybox ls 其功能就相当于运行ls命令。 最常用的用法就是建立指向busybox的链接,不同的链接名称完成不同的功能 ln s busybox ls 然后运行链接: #./ls 就相当于完成类似的命令功能。虽然所有指令都指向同一个可执行程序busybox但是只要链接名不同,完成的功能就不同,busybox就是这么神奇。3 配置busybox busybox的配置程序和linux内核菜单配置方式简直一模一样.熟悉用make menuconfig方式配置linux内
28、核的朋友很容易上手.#cp busybox-1.5.0.tar.gz /usr/tmp#cd /usr/tmp#tar xvfz busybox-1.5.0.tar.gz#cd busybox-1.5.0#make menuconfig下面是需要编译进busybox的功能选项,其他的可以根据需要自选,但是同样不要太贪心.General Configuration应该选的选项Use devpts filesystem for unix98 PTYSShow verbose applet usage messagesRuntime SUID/SGID configuration via /etc/
29、busybox.conf Build Optionsbuild shared libbusyboxUse shared libbysybox for busybox 这里把busybox编译成共享库的形式,由于这个项目中的应用程序也用到和busybox一样的库文件,所以就没必要把busybox编译成静态库的形式了。但是在做软盘启动盘等空间有限的项目时最好编译成静态库形式。Installation OptionsDont use /usr这个选项也一定要选,否则make install 后busybox将安装在原系统的/usr下,这将覆盖掉系统原有的命令.选择这个选项后,make install
30、后会在busybox目录下生成一个叫_install的目录,里面有busybox和指向他的链接.其他选项都是一些linux基本命令选项,自己需要哪些命令就编译进去,一般用默认的就可以了.配置好后退出并保存.注意:(1) 在Applets大项的shell子项中的Standalone shell 不用选。否则在bin目录 下将没有sh这个applet(2) 如果 要使用telnetd服务的话,可以选上Support standalone telnetd(not inexd only)选项,这样在启动telnetd服务时就不用inetd 服务来管理。(3) 关于busybox各条命令的使用和选项的详
31、细信息请察看官方网站。4 编译安装busyboxmake#make install编译好后在busybox目录下生成_install目录,里面的内容是:drwxr-xr-x 2 root root 4096 3月 29 18:06 binlrwxrwxrwx 1 root root 11 3月 29 18:06 linuxrc - bin/busyboxdrwxr-xr-x 2 root root 4096 1月 29 18:06 sbin其中可执行文件busybox在bin目录下,其他文件都是指向busybox的连接。七制作根文件系统。1 基本的目录结构linux常见的目录结构包括bin s
32、bin lib etc dev var proc root home tmp mnt,lost+found,usr,opt等。为了对文件系统结构有进一步的认识,这里对这些目录作简单胡说明。Bin :显然,bin就是二进制(binary)的缩写,在一般的系统中,你都可以在这个目录下找到linux系统常用的命令。Sbin:这个目录下通常存放系统管理员的系统管理程序Lib:lib是库(library)的缩写。这个目录是用来存放系统动态连接库的,几乎所有的应用程序都会用到该目录下的共享库。Etc:etc这个目录是linux系统最重要的目录之一,在这个目录下存放了系统管理是要用到胡各种配制文件和子目录。
33、我们要用到的网络配制文件,文件系统,x系统配制文件,设备配制信息,用户信息等都在这个目录下。 Dev:dev是(device)的英文设备,这个目录对所有的用户都十分重要。在这目录中包含了linux系统的所有外部设备,这里存放的并不是外部设备的驱动程序,而是访问这些设备的端口。有了这些端口对设备的访问就象访问文件一样简单。Var:这个目录的内容是经常变动的,看名字就知道,我们可以理解为vary的缩写。/var下有/var/log是用来存放系统日志的目录。Proc:可以在这个目录下获得系统信息,这些信息是在内存中,由系统自己产生的。Root:如果你是以超级用户身份登陆的,那么这个目录就是你工作的主
34、目录。Home:如果我们建立一个用户aa,那么在home目录下就会出现一个aa目录,这个aa目录就是用户aa的主目录。Tmp:用于存放各应用程序产生的临时文件。Mnt:这个目录一般是空的,你可以临时将别的文件系统挂载到这个目录下。Lost+found:这个目录大多数情况下是空的,但是如果你正在工作突然停电,或没有以正常方式关机,在你重起时,有些文件就找不到应该存放的地方,对于这些文件,系统就将她们放在这个目录下,就相当于给无家可归的人提供一个临时住所。Usr:是系统存放程序的目录。Opt:是可选目录,有些软件默认的安装目录是这里。好了,了解了文件系统的结构,现在就开始向各目录中填充内容了。#c
35、d /usr/tmp#mkdir rootfs#cd rootfs#mkdir root home mnt usr opt var proc etc dev tmp myapp其中etc proc 和dev是一定要有的,myapp用于将hdc5上存放的应用程序挂载到此目录下.bin shin 就不用建了,因为busybox中已经有了。直接拷贝过来就可以了.#cp arf busybox-1.5.0/_install/* .我在制作cflinux过程中遇到一个奇怪的bug,就是系统起来后运行/sbin目录下的指令时都提示该指令不存在。后来,我把连接地址“./bin/busybox”改为“/bin
36、/busybox”或”/bin/sh”就可以了。建立var目录中子目录和连接: #cd var#mkdir lib#ln s /tmp lock#ln s /tmp log#ln s /tmp pcmcia#ln s /tmp run#ln s /tmp spool#/n s /tmp tmp3 建立设备文件#cd /usr/tmp/rootfs/dev 你可以用mknod手工建立,也可以直接从原系统的/dev目录下拷贝过来.手工建立的方法:#ls -l /dev/consolecrw- 1 root root 5, 1 11月 30 09:02 /dev/console这样就查看到了cons
37、ole设备的主设备号是5,辅设备号是1,是一个标记为C的字符设备.于是,我们可以用mknod建立一个同样的设备文件:#mknod console c 5 1但是手工方法建立太麻烦了,通常直接从/dev下把需要的设备文件拷贝过来.这些设备文件是特殊文件,在拷贝时一定要加上-arf参数才能拷贝.#cp -arf /dev/console ./#cp -arf /dev/null ./#cp -arf /dev/zero ./.以下是我认为需要的设备名: console core fb fb0 fb1 hda1 hda2 hdb hdb1 hdb2 hdc hdc1 hdc2 hdc3 hdc4 h
38、dc5 hdc6 hdc7 hdc8 hdc9 hdd hdd1 hdd2 kmem loop0 loop1 loop2 loop3 loop4 loop5 mem null psaux psmouse ptmx pts ram ram0 ram1 ram2 ram3 ram4 ram5 ram6 ram7 ram8 ram9 ramdisk random sda sda1 sda2 sdb sdb1 sdb2 sdc sdc1 sdc2 stderr stdin stdout systty tty tty0 tty1 tty2 tty3 tty4 tty5 tty6 tty7 tty8 tt
39、y9 ttyS0 ttyS1 ttyS2 ttyS5 ttyS5 urandom zero 其中console ram ram1 tty1 null zero loop fb0 fb等是必须的。至于其他的一些设备可以根据实际情况进行剪裁。建立etc下的配制文件busybox.conf group inittab motd matb passwd resolv.conf shadow- fstab init.d(目录) issue profile shadow inputrc issue protocols securetty services network(目录)busybox.conf m
40、otd matb 是一个空文件. Protocols和services直接重系统目录下拷贝过来Cp f /etc protocols services ./其他文件内容如下:group:root:x:0:cf:x:1001:inittab:# /etc/inittab# Copyright (C) 2001 Erik Andersen # Note: BusyBox init doesnt support runlevels. The runlevels field is# completely ignored by BusyBox init. If you want runlevels, u
41、se# sysvinit.# Format for each entry: :# id = tty to run on, or empty for /dev/console# runlevels = ignored# action = one of sysinit, respawn, askfirst, wait, and once# process = program to run# Startup the systemnull:sysinit:/bin/mount -o remount,rw /null:sysinit:/bin/mount -t proc proc /procnull:s
42、ysinit:/bin/mount -a /etc/mtabnull:sysinit:/bin/hostname -F /etc/hostnamenull:sysinit:/sbin/ifconfig lo 127.0.0.1 upnull:sysinit:/sbin/ifconfig -a eth0null:sysinit:/sbin/ifconfig eth0 192.168.4.44 netmask 255.255.255.192null:sysinit:/sbin/route add -net 127.0.0.0 netmask 255.0.0.0 lonull:sysinit:/sb
43、in/route add -net 192.168.4.0 netmask 255.255.255.255 eth0# now run any rc scripts:sysinit:/etc/init.d/rcS# Set up a couple of gettys# 使用login登陆管理tty1:respawn:/sbin/getty 38400 tty1 #不需要登陆直接进入控制台,进行操作#tty1:respawn:/bin/shtty2:askfirst:/bin/sh# Put a getty on the serial port#ttyS0:respawn:/sbin/getty
44、 -L ttyS0 115200 vt100# Stuff to do for the 3-finger salute:ctrlaltdel:/sbin/reboot:restart:/sbin/init# Stuff to do before rebootingnull:shutdown:/bin/umount -a rpasswd:root:x:0:0:root:/root:/bin/shcf:x:1001:0:Linux User,:/home/soullon:/bin/sh shadow: root:10933:0:99999:7:cf:13604:0:99999:7:注意:这里两个用
45、户都没设密码,如果要加密码胡话在用户名后的第一个“:”和第二个“:”之间加上密码胡hash值。如:root:$1$NuFDgiiI$664QR8N4HSdgkUDKpxEB00:10933:0:99999:7:shadow-:root:10933:0:99999:7:cf:13604:0:99999:7:resolv.conf /tmp/resolv.conffstab: /dev/hdc1 / ext2 defaults 1 1/dev/hdc1 / ext2 defaults 1 1none /proc proc defaults 0 0usbdevfs /proc/bus/usb usbdevfs rw 0 0none /dev/pts devpts rw,gid=5,mode=620 0 0none /tmp tmpfs defaults 0 0/dev/hdc5 /myapp ext2 defaults 0 0init.d(目录):rcS:#start inetd and telnetd/sbin/telnetd -p 23#run myappexport QTDIR=/yysgexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/myapp/lib:/usr/libcd /myapp./myapp q
限制150内