http://www.chinaunix.net/jh/4/626904.html
呵呵,终于搞完了,把它发到一个贴子中来,做了一些修改……其中还有一些错误,希望大家指正,偶好修改!!! 独孤九贱 回复于:2005-10-13 17:47:17 PDF版本及后续PDF更新版本,你可以在 http://www.skynet.org.cn/viewthread.php?tid=82 下载。 不过好像下载要先注册(我没找到如何取消这一限制)! 8) 惠繪洋 回复于:2005-10-13 18:06:52 第一個. 謝謝樓主... 看來各位不必下載pdf檔了, 因為我下了, 發現和樓主post出來的是一樣, 只要把樓主的copy到word就可以了... :em02: :em02: platinum 回复于:2005-10-13 18:17:55 感谢楼主的付出 jasonaizhu 回复于:2005-10-14 00:15:06 樓主太強暸,很想看《网络入侵检测设计与Snort2.2源码分析》,能髮上來嗎? sinboy2002 回复于:2005-10-14 01:05:02 太深奥了 zsq2329 回复于:2005-10-14 06:17:09 好东东,赞一个, 正在考虑做一个类BBIAGENT的东西到U盘上。 独孤九贱 回复于:2005-10-14 08:35:13 引用:原帖由 "jasonaizhu"]樓主太強暸,很想看《网络入侵检测设计与Snort2.2源码分析》,能髮上來嗎? 你可以在我的网站www.skynet.org.cn上找到的 别爱我我没钱 回复于:2005-10-14 17:59:17 收藏了 wangzhixu 回复于:2005-10-14 18:39:35 收藏了 answer3 回复于:2005-10-15 21:45:02 thanks lingangdan 回复于:2005-10-19 10:57:12 好东东,收藏了! ytlxx 回复于:2005-10-19 11:08:38 谢谢了,copy到我的硬盘了 cnhero 回复于:2005-10-19 19:20:33 very good! 借鉴!学习中!! plumlee 回复于:2005-10-23 10:51:01 Good job ~~! LZ 太厉害啦 大大狗 回复于:2005-10-23 19:11:06 收藏了,谢楼主 liuzhuan23 回复于:2005-10-27 12:46:14 谢谢第一手资料,感动中流泪中..................!!!!!!!!!!!!!!!!! 独孤九贱 回复于:2005-11-01 10:34:13 不好意思,最近工作太忙,好久没有来搞这个东东了,加之心爱的手机丢了,心情又不太好,不过一切都过去了,继续来将它补充完整。 [color=Red][size=3]修改启动脚本[/size][/color] 在前面写rcS启动脚本中。当时只是为了系统能够正常地启动,在启动网卡/路由/服务等时,有如下语句: —————————————————————————————————————————————— #set lo ip address ifconfig lo 127.0.0.1 #set eth0 ip address #当然,这样子做只是权宜之计,最后做的应该是在这一步引导网络启动脚本,像RedHat #那样,自动读取所有指定的配置文件来启动 ifconfig eth0 192.168.0.68 netmask 255.255.255.0 #set route #同样的,最终这里应该是运行启动路由的脚本,读取路由配置文件 route add default gw 192.168.0.1 …… ——————————————————————————————————————————————— 这样配置的最大坏处就是不能根据配置文件自定义,每次开机都定死了,现在来修改它,将这段语句删除之,换成如下语句: for i in /etc/start/S??* ;do # Ignore dangling symlinks (if any). [ ! -f "$i" ] && continue echo "Running $i ." case "$i" in *.sh) # Source shell script for speed. ( trap - INT QUIT TSTP set start . $i ) ;; *) # No sh extension, so fork subprocess. $i start ;; esac echo "Done $i ." echo done 解释一下,这段语句的作用,就是启动/etc/start/目录下,所有以S开头的脚本文件,可以启动两类,以sh结尾或没有 sh后缀的。 这样,我们在/etc/目录下再新建一目录start/,这里面就是我们启动时需要的脚本的。先来启动网卡。 [size=3][color=Red]修改网卡配置文件[/color][/size] 我是根据Red hat的作法,把网卡配置放在/etc/sysconfig/network-scripts目录下,类似于ifcfg-ethXX这样子,它们的语法是: DEVICE=eth0 BOOTPROTO=static BROADCAST=88.88.88.255 IPADDR=88.88.88.44 NETMASK=255.255.255.0 NETWORK=88.88.88.0 ONBOOT=yes 好,建立这些目录和文件,我共有两个文件ifcfg-ethXX。回到/etc/start目录,建立网卡的启动脚本S01interface: #!/bin/sh . /etc/sysconfig/network #enable ip_forword echo >1 /proc/sys/net/ipv4/ip_forward #enable syn_cookie echo >1 /proc/sys/net/ipv4/tcp_syncookies #enable loopback interface /sbin/ifconfig lo 127.0.0.1 #eanble ethernet interface /usr/sbin/bootife #set hostname if [ -z "$HOSTNAME" -o "$HOSTNAME" = "(none)" ] then HOSTNAME=localhost fi /bin/hostname ${HOSTNAME} 请注意这个脚本文件,有两个地方: 1、包含了另一个配置文件/etc/sysconfig/network,在这里,我也是照抄了redhat,我的/etc/sysconfig/network这个文件的内容如下: NETWORKING=yes HOSTNAME=skynet GATEWAY=88.88.88.2 2、在启动网卡时,我使用了 #eanble ethernet interface /usr/sbin/bootife bootife是我自己写的一个C程序,作用是读取/etc/sysconfig/network-scripts/下面的ifcfg-ethXX文件,并配置之,本来这里就该用shell来完成更合适一点,无奈,偶shell功底实在差了一点(刚学几天),就是想从Redhat中照抄过来,反复试了几次也没有成功。所以被逼无奈用C来完成之,后面我会附上我的C的源码,也希望哪位大哥能够写一段Shell的程序代替它,放上来大家共享之。 [size=3][color=Red]修改路由启动文件[/color][/size] 同样的,我在/etc/start下,建立新脚本S02route.sh,它的作用是启动所有配置的静态路由: #!/bin/bash . /etc/sysconfig/network # Add non interface-specific static-routes. if [ -f /etc/sysconfig/static-routes ] then grep "eth*" /etc/sysconfig/static-routes | while read ignore args ; do # echo "/sbin/route add -"$args /sbin/route add -$args done fi #Add defalut gw /sbin/route add default gw ${GATEWAY} OK,启动时读取的配置文件是/etc/sysconfig/static-routes ,它的语法和Redhat是一样的,请参照建立此文件。 [size=3][color=Red]启动服务程序[/color][/size] 新建启动脚本S03server: #!/bin/sh #------------------------------------------------------------------ #-- Source #-- Author(s) : kendo #-- Email: [email][email protected][/email] #-- http://www.skynet.org.cn #-- 2005/10/31 #------------------------------------------------------------------ . /etc/sysconfig/bootserver if [ "$enable_httpd" = 1 ] ; then . /etc/scripts/httpd.sh $1 fi if [ "$enable_adsl" = 1 ] ; then …… fi if [ "$enable_udhcpd" = 1 ] ; then …… fi 很简单,根据相应变量的值,调用相应的脚本。 1、这些启动标志变量,我定义在了/etc/sysconfig/bootserver当中,其内容如下: #start server on system boot #1:yes 0:no enable_httpd=1 enable_adsl=1 enable_udhcpd=1 2、每种服务对应的脚本,我都放在了/etc/scripts下面。这些脚本,取决于你打算使用哪些服务程序了。脚本的来源,可以自己编写,有可能其源码中自带有,也可以到网上查找……我就不再一一赘述了, OK,基本上,脚本的修改就完成了,下一步,将是建立RamDisk。 —————————————————————————————————————————————— 附,读取网卡配置文件,启动网卡的C源码: /************************************************************************ ** author:kendo ** date:2005/10/26 ***********************************************************************/ #include #include #include #include #include #include #define NETCFGDIR "/etc/sysconfig/network-scripts/" struct _ifcfg{ char device[8]; char bootproto[8]; char br[16]; char netmask[16]; char ip[16]; char network[16]; int onboot; }; void ParseKey(struct _ifcfg *ifcfg,char *key,char *value) { if(!strcmp(key,"DEVICE")) { strcpy(ifcfg->device,value); } else if(!strcmp(key,"BOOTPROTO")) { strcpy(ifcfg->bootproto,value); } else if(!strcmp(key,"BROADCAST")) { strcpy(ifcfg->br,value); } else if(!strcmp(key,"IPADDR")) { strcpy(ifcfg->ip,value); } else if(!strcmp(key,"NETMASK")) { strcpy(ifcfg->netmask,value); } else if(!strcmp(key,"NETWORK")) { strcpy(ifcfg->network,value); } else if(!strcmp(key,"ONBOOT")) { ifcfg->onboot=(strcmp(value,"yes") ? 0 : 1); } } int main(int argc,char **argv) { FILE *fp; DIR *dir; int i; char filename[50],buf[80]; char *index,*key,*value,*p; struct _ifcfg *ifcfg; struct dirent *ptr; ifcfg=(struct _ifcfg *)malloc(sizeof(struct _ifcfg)); memset(ifcfg,0,sizeof(struct _ifcfg)); dir=opendir(NETCFGDIR); /*打开脚本目录*/ while((ptr=readdir(dir))!=NULL) /*读取所有文件*/ { if(strncmp(ptr->d_name,"ifcfg-eth",9)) /*这里,只启动了以太网卡^o^*/ { continue; } memset(filename,0,sizeof(filename)); sprintf(filename,"%s%s",NETCFGDIR,ptr->d_name); if((fp=fopen(filename,"r"))==NULL) /*打开配置文件*/ { continue; } while(!feof(fp)) { memset(buf,0,sizeof(buf)); if(fgets(buf,80,fp)!=NULL) /*逐行读取分析*/ { p=strchr(buf,'n'); if(p) { *p=''; } index=buf; key=strtok(index,"="); /*读取配置变量*/ value=strtok(NULL,"="); /*读取变量的值*/ ParseKey(ifcfg,key,value); /*分析之,存入结构ifcfg中*/ } } /*构建相应的命令*/ memset(buf,0,80); strcpy(buf,"/sbin/ifconfig"); if(ifcfg->onboot) { sprintf(buf,"%s %s %s netmask %s broadcast %s", buf, ifcfg->device, ifcfg->ip, ifcfg->netmask, ifcfg->br); /*直接调用system来实现,当然也可以自己通过ioctl来设置,相应源码,我以前在c/c++版发过*/ system(buf); } } free(ife); return 0; } platinum 回复于:2005-11-01 10:52:17 发表:
两个问题 1、从这段代码看,实际调用了 /sbin/ifconfig 来完成网卡的设置,那么,这个程序是否必须用 root 来执行? 2、为何不用 system("command") 呢? 独孤九贱 回复于:2005-11-01 11:03:34 1、ifconfig本身运行,应该不需要root吧?而至于在shell中的运行权限,要看看相应的权限位了,事实上它已经能够在我的系统中很好的运行了,测试过很多次的。不过现在我的系统,其实没有用这种方法的,我是自己封装了一个网卡管理的库,也就是重写了ifconfig,不过要把这些代码发上来,太麻烦了,所以,就用了解system简单了一点。 2、我不是很理解“为何不用 system("command") 呢?”这句话的含义,我用的是system(buf);你说的是不是为什么要去构建一个buf,而不是直接用system("/sbin/ifconfig ethXX……")?清楚一点……^o^ Mc_Hill 回复于:2005-11-06 15:54:40 谢谢 coocal 回复于:2005-11-08 22:14:57 多谢楼主分享!下来学习学习! coocal 回复于:2005-11-08 22:28:29 怎么把那些表情去掉啊??? 独孤九贱 回复于:2005-11-16 09:44:36 继续工作,交叉编译SNMP 一般系统都会有SNMP的支持,下载了net-snmp-5.1.3.1,先看看INSTALL和FAQ文档(因为以前从来没有碰过这个东东,见笑了……),按照说明,在原生主机上安装了一回,安装完成后,发现在指定安装目录下主要包括了几块文件: bin:SNMP的一些功能脚本和程序; sbin:主要的代理程序和trap程序:snmpd和snmptrap include/lib:自身兼容及第三方开发所需的头文件及库文件; share:主要是MIB文件; 然后回到安装目录下,运行./configuare --help,仔细查看了其安装编译选项,因为我定位的小型的系统,只需具备基本的SNMP功能即可,所以: 那些bin目录下的功能程序也不需要,对应--disable-applications bin下的脚本也是不需要的,对应:--disable-scripts 用户手册也不需要:--disable-manuals 关闭ipv6支持:--disable-ipv6 还有一个--enable-mini-agent选项,说明是编译出一个最小化的snmpd,比较有趣,试试先。 对于交叉编译,还需要用--host指明目标平台。 OK,看完了帮助说明,开始编译了: 1、配置,根据以上确定的选项: [root@skynet root]# CC=i386-linux-gcc ./configure --host=$TARGET --enable-mini-agent --disable-ipv6 --with-endianness=little --disable-applications --disable-manuals --disable-scripts --disable-ucd-snmp-compatibility CC指明了编译器;--host指明了我的目标平台,这个环境变量在我前面定义的devedaq脚本中。 还算顺利,继续编译它: [root@skynet net-snmp-5.1.3.1]# make LDFLAGS="-static" 呵呵,因为没有装lib库,所以我用了-static选项,指明是静态编译; 3、安装 安装就需要指明安装路径了,路径可以在.config的时候指定,因为那个时候,那串东东太长了,我在install时指定也不迟: #make prefix=${TARGET_PREFIX} exec_prefix=${TARGET_PREFIX} install 4、检查一下: [root@skynet net-snmp-5.1.3.1]# ls -l ${TARGET_PREFIX}/sbin total 2120 -rwxr-xr-x 1 root root 2164301 Nov 16 09:22 snmpd snmpd就是我们要的代理主程序了,大约静态编译有2M。 [root@skynet net-snmp-5.1.3.1]# ls -l ${TARGET_PREFIX}/bin total 4380 -rwxr-xr-x 2 root root 391980 Oct 14 2004 ar -rwxr-xr-x 2 root root 581228 Oct 14 2004 as …… 呵呵,那堆程序和脚本没有安装,如snmpwalk…… ls ${TARGET_PREFIX}/lib ls -l ${TARGET_PREFIX}/include 看看我们需要的mib文件: [root@skynet net-snmp-5.1.3.1]# ls ${TARGET_PREFIX}/share/snmp mib2c.access_functions.conf mib2c.column_defines.conf mib2c.int_watch.conf mib2c.old-api.conf mib2c.array-user.conf mib2c.column_enums.conf mib2c.iterate_access.conf mib2c.scalar.conf mib2c.check_values.conf mib2c.conf mib2c.iterate.conf mibs mib2c.check_values_local.conf mib2c.create-dataset.conf mib2c.notify.conf snmpconf-data 5、移植 基本完成了,因为snmpd太大了点,对它进行strip处理: 先备个份: [root@skynet net-snmp-5.1.3.1]# cp ${TARGET_PREFIX}/sbin/snmpd ${TARGET_PREFIX}/sbin/snmpd.bak [root@skynet net-snmp-5.1.3.1]# i386-linux-strip ${TARGET_PREFIX}/sbin/snmpd [root@skynet net-snmp-5.1.3.1]# ls -l ${TARGET_PREFIX}/sbin/snmpd -rwxr-xr-x 1 root root 503300 Nov 16 09:30 /home/skynet/tools/i386-linux/sbin/snmpd 经过处理后,还有近500KB了。 因为只有SNMP agent功能,即snmpd程序,其它的都可以忽略。用了静态编译,lib下边那些libnetsnmp文件都可以不需要了,程序运行 需要MIB库,也就是share下的内容,把这两个东东拷到rootfs相应的目录中去: [root@skynet net-snmp-5.1.3.1]# cp ${TARGET_PREFIX}/sbin/snmpd ${PRJROOT}/rootfs/usr/sbin [root@skynet net-snmp-5.1.3.1]# mkdir -p ${PRJROOT}/rootfs/usr/local/share [root@skynet net-snmp-5.1.3.1]# cp -r ${TARGET_PREFIX}/share/snmp ${PRJROOT}/rootfs/usr/local/share [root@skynet net-snmp-5.1.3.1]# cp EXAMPLE.conf ${PRJROOT}/rootfs/usr/local/share/snmp/snmpd.conf 最后一步是把安装目录下的配置文件范例拷到snmpd启动时默认的搜索目录中去。 6、测试 打开snmpd.conf看看: [root@skynet net-snmp-5.1.3.1]# vi ${PRJROOT}/rootfs/usr/local/share/snmp/snmpd.conf 有如下语句: # sec.name source community com2sec local localhost COMMUNITY com2sec mynetwork NETWORK/24 COMMUNITY 定义了两个用户,本地及网络的,以及它们的通读密钥,按自己的需要修改一下,如: # sec.name source community com2sec local 127.0.0.1 public com2sec mynetwork 0.0.0.0 public 后面是定义用户的用户组等一大堆东东,事实上不用修改它们了。运行它: [root@skynet net-snmp-5.1.3.1]# chroot ${PRJROOT}/rootfs /bin/sh BusyBox v1.00 (2004.10.13-06:32+0000) Built-in shell (ash) Enter 'help' for a list of built-in commands. / # snmpd / # exit 在我们自己的根文件系统环境下运行它,然后退出来。用ps查看: #ps -aux …… root 32270 0.0 0.3 1212 936 ? S 09:38 0:00 snmpd [root@skynet net-snmp-5.1.3.1]# netstat -anu …… udp 0 0 0.0.0.0:161 0.0.0.0:* 呵呵,已经成功启动了。用一个SNMP管理软件试试,可以成功地获取到信息。OK! 总结一下: 1、主程序+MIB库大了点,共计约2M,不过我确实没有办法再小了,而且一味求小,也不是我的目的。 2、功能稍微简单了些,只有agent,如果需要,可以类似地把其它程序加上去就可以了。 3、第一次玩net-snmp,还是有点生疏,比如我静态编译二进制程序,并不需要include/lib下的文件,但是如何关闭它们呢?我试过--disable-ucd-snmp-compatibility,不过好像不是这个选项……下次改进了…… 独孤九贱 回复于:2005-11-16 13:38:22 继续工作,使用ramdisk 前提:内核编译时得选相应的支持选项,前文已有叙述。 1、rootfs中的/boot文件夹删除; 2、建立ramdisk: 使用dd命令建立一个空的文件系统映像: # dd if=/dev/zero of=images/initrd.img bs=1k count=8192 大小8192K,用/dev/zero对其初始化; 利用刚才的空的文件系统映像,建立文件系统并安装它,使用了mke2fs命令: # /sbin/mke2fs -F -v -m0 images/initrd.img 新建一个临时文件夹做mount之用: # mkdir tmp/initrd 把建好的文件系统mount上来: #mount -o loop images/initrd.img tmp/initrd 把根文件系统拷贝过来: #cp -av rootfs/* tmp/initrd # umount tmp/initrd 压缩: # gzip -9 这样,就得到了images/initrd.bin 把目标盘mount上来: #mount -t ext2 /dev/hda1 /mnt/cf 新建一个/boot #mkdir /mnt/cf/boot 把刚才建立的ramdisk镜像拷过来。然后把内核文件bzImage-2.4.27-rmk5也拷进去。 这样,boot文件夹里边有两个文件 initrd.bin bzImage-2.4.27-rmk5 这个时候还不能安装lilo,因为lilo的配置文件中有/dev/hda……这样的东东,而目标盘上还没有……所以,临时建一个: #mkdir /mnt/cf/dev #cp -rf ${PRJROOT}/rootfs/dev/hda* /mnt/cf/dev 修改${PRJROOT}/rootfs/etc/target.lilo.conf,我的配置文件如下: boot=/dev/hda disk=/dev/hda bios=0x80 image=/boot/bzImage-2.4.27-rmk5 initrd=/boot/initrd.bin root=/dev/hda1 append="root=/dev/hda1" # label=MyLinux read-only 相比以前的,只是加了一句:initrd=/boot/initrd.bin,另外把label去掉了,因为否则lilo会报怨说语法错误。 好了,可以安装lilo了。以前我们的语句是: lilo -r /mnt/cf -C etc/target.lilo.conf 现在我们的目标盘上没有etc这个目录了,更不用说target.lilo.conf,可以借助于工程目录中的了原文件,当然,我在目标硬盘上新建了/dev,然后把target.lilo.conf拷过去,还是用这句命令安装lilo。 这样,整个系统就完成了。 总结:还是想把kernel与文件系统都做到initrd.bin中,不过现在还没有找到可行的办法,大家也可以跟贴讨论如何来做,偶也好学学…… carrison 回复于:2005-11-16 14:35:28 呵呵,跟gentoo很像啊 hncathy 回复于:2005-11-16 16:19:57 我这个新手看了楼主的文章,佩服极了,不知道我什么时候才能赶上楼主?%的水平,努力学习!3KS! xuequansongmo 回复于:2005-11-16 18:49:09 收到 ak-1 回复于:2005-11-21 12:43:05 多谢楼主,先收下了,慢慢学习中。。。。。 临风轩主 回复于:2005-11-21 12:58:21 强人呀 plumlee 回复于:2005-11-22 08:56:35 谢谢~~ blueproton 回复于:2005-11-22 11:38:58 经典啊,楼主真够意思~~~~~~~~ 笨笨鸟 回复于:2005-11-22 17:06:04 谢谢! warning1 回复于:2005-11-26 09:14:10 顶,多谢楼主的分享,又长知识了. shappen 回复于:2005-11-26 11:57:47 引用:原帖由 carrison 于 2005-11-16 14:35 发表 呵呵,跟gentoo很像啊 哈哈,我也想说这个跟LFS很像来着,最近了解了一个Skyeye这个项目,感觉里面有很多东西都是共通的,谢谢楼主!! 独孤九贱 回复于:2005-11-26 12:47:35 做这个前,我就跟着LFS做了一遍…… 其实只要是Linux,那么它的根本思路、脉络、方法是相通的! 这几天正在做优化,精简,希望做一个高效、稳定的小系统出来,正在改进当中,希望圣诞节之前能够搞定它。 SeanGe 回复于:2005-11-27 17:16:18 楼主辛苦了! 我对这块也很有兴趣...但还处于最最基础阶段 嘿嘿 学习下 macrodba 回复于:2005-11-29 09:51:59 不错。丁以下 坤义 回复于:2005-11-30 12:46:58 居然不让打印, 真是气愤! carrison 回复于:2005-11-30 16:15:06 引用:原帖由 坤义 于 2005-11-30 12:46 发表 居然不让打印, 真是气愤! 老兄要出论文?哈哈:wink: studentstep 回复于:2005-12-06 10:35:55 mark 大块头 回复于:2005-12-08 16:33:11 楼主的网络设置为何不用 /etc/init.d/network start 是不是那样有问题才选择用ifconfig的,似乎启用network脚本才是正途,呵呵 另外LZ使用busybox过程中难道就没有出现过奇怪的问题么?怎么解决的,还请LZ写出来分享一下. LZ的文章不错,但忽略了些东西. 湖心小筑 回复于:2005-12-08 16:40:18 我到现在对嵌入式开发还没有透彻的理解,哪位给解释一下呗? deevarvar 回复于:2005-12-09 16:48:29 buildroot-0.9.27.tar.tar在哪可以下载,先谢谢了! 独孤九贱 回复于:2005-12-11 11:15:40 引用:原帖由 大块头 于 2005-12-8 16:33 发表 楼主的网络设置为何不用 /etc/init.d/network start 是不是那样有问题才选择用ifconfig的,似乎启用network脚本才是正途,呵呵 另外LZ使用busybox过程中难道就没有出现过奇怪的问题么?怎么解决的,还请LZ写出来分 ... 1、/etc/init.d/network start 这个脚本是RedHat的,书中我已注明,“自己由于脚本语言水平不够,实际上真正接触linux也是近几个月的事,所以没有办法实现一个这样的脚本,所以启动网卡就使用了C语言来代替,也希望哪位能够写一个出来大家分享之” 2、我使用busybox的确遇到几个问题,一些问题在文章中已有提现,现在最大的问题是busybox 1.0在Console下Ctrl+C不起作用,现在正在阅读源码,试求解决之。 3、如果你遇到一些问题,并有了好的解决办法,可以跟贴上来,大家都好学习,这也是我贴此贴的初衷所在。 231053469 回复于:2005-12-12 10:10:20 经典,神!!!!! x4ulocca 回复于:2005-12-20 09:32:24 谢谢楼主。想问下大家,没有真实的硬盘,在vmware下虚拟硬盘可以不可以做相应的工作呢 哈密瓜 回复于:2005-12-20 09:46:33 强贴,收藏! 爱国人士 回复于:2006-01-04 21:26:11 很不错呀 支持了 platinum 回复于:2006-01-04 21:59:18 下载了 buildroot,make menuconfig 后 make,出现了这样的提示,是为什么呢?
提示我 /KERNEL/buildroot/build_i686/staging_dir/bin/i686-linux-uclibc-gcc: Command not found 他是自动下载并解压编译的,为什么还这样? jeffshia 回复于:2006-01-04 22:56:58 good job! 独孤九贱 回复于:2006-01-05 08:54:48 引用:原帖由 platinum 于 2006-1-4 21:59 发表 下载了 buildroot,make menuconfig 后 make,出现了这样的提示,是为什么呢?
选项里有一个关于下载的选项,你是不是把它去掉了,导致下载不了? platinum 回复于:2006-01-05 09:10:31 引用:原帖由 独孤九贱 于 2006-1-5 08:54 发表 选项里有一个关于下载的选项,你是不是把它去掉了,导致下载不了? 我没有动啊,都是默认的,而且我看到他自动下载了 uClibc 的快照和 kernel-2.4.31-header.tar.bz2,为什么会这样呢? 我用的是 buildroot-20051230.tar.bz2,也就是 12-30 的快照 独孤九贱 回复于:2006-01-05 09:51:39 引用:原帖由 platinum 于 2006-1-5 09:10 发表 我没有动啊,都是默认的,而且我看到他自动下载了 uClibc 的快照和 kernel-2.4.31-header.tar.bz2,为什么会这样呢? 我用的是 buildroot-20051230.tar.bz2,也就是 12-30 的快照 没有用过20051230,是不是新版本有什么问题?回头可以试试先,现在在玩snapgear,这个东东功能比buildroot更好玩,虽然玩得我最近郁闷之极…… 爱国人士 回复于:2006-01-05 20:51:54 这篇文章看的太精彩了,我以前没有这样的做小系统,但也是用busybox做的,我装了iptables,内核编译时去掉了很多东西的支持,目的就是只让他做为route和firewall。 teffguo 回复于:2006-01-06 02:18:56 太历害了 baon7994917 回复于:2006-01-06 13:35:28 hao book heyi2008 回复于:2006-01-06 17:39:52 outstanding! friday182 回复于:2006-01-06 21:09:33 俺也不远万里顶一下,对新手很有价值 linuxiang 回复于:2006-01-09 16:43:42 写了一个简单的设置ip和网关的脚本,具体情况要看大家的linux而定,自己修改一下脚本就可以了,我的是RH9,下面是我的启动的脚本,有问题请大家指正。 #!/bin/sh IFCFGPATH="/etc/sysconfig/network-scripts/ifcfg-eth0" if [ ! -f $IFCFGPATH ] then echo ${IFCFGPATH}:file not exist exit 1 fi while read line do line=${line%%=*} # echo $line case $line in DEVICE) DEVICE=$(grep 'DEVICE' $IFCFGPATH) DEVICE=${DEVICE##*=} ;; IPADDR) IPADDR=$(grep 'IPADDR' $IFCFGPATH) IPADDR=${IPADDR##*=} ;; NETMASK) NETMASK=$(grep 'NETMASK' $IFCFGPATH) NETMASK=${NETMASK##*=} ;; GATEWAY) GATEWAY=$(grep 'GATEWAY' $IFCFGPATH) GATEWAY=${GATEWAY##*=} ;; esac done < $IFCFGPATH #echo $DEVICE #echo $IPADDR #echo $NETMASK #echo $GATEWAY IPCOMMAND="/sbin/ifconfig $DEVICE $IPADDR netmask $NETMASK" ROUTECOMMAND="/sbin/route add default gw $GATEWAY" #echo $IPCOMMAND #echo $ROUTECOMMAND $IPCOMMAND $ROUTECOMMAND 注: line=${line%%=*}截断line字符串,去掉=号后面的字符串(包括=),并把结果赋值给变量line DEVICE=$(grep 'DEVICE' $IFCFGPATH)在/etc/sysconfig/network-scripts/ifcfg-eth0搜索字符串DEVICE,并把结果赋值给变量DEVICE DEVICE=${DEVICE##*=}截断DEVICE字符串,去掉=号前面的字符串(包括=) gotop167 回复于:2006-01-09 18:03:15 好东西! unregister 回复于:2006-01-09 18:39:34 好东西,先顶了再说。 独孤九贱 回复于:2006-01-10 09:10:20 引用:原帖由 linuxiang 于 2006-1-9 16:43 发表 写了一个简单的设置ip和网关的脚本,具体情况要看大家的linux而定,自己修改一下脚本就可以了,我的是RH9,下面是我的启动的脚本,有问题请大家指正。 #!/bin/sh IFCFGPATH="/etc/sysconfig/network-scr ... 如果是读取所有的文件,而不是指定某个文件就更好了,因为每个人的机器的网卡是不同的! x4ulocca 回复于:2006-01-13 15:25:26 引用:本的设备文件建立好后,再创建必要的符号链接: # ln -s /proc/self/fd fd # ln -s fd/0 stdin # ln -s fd/1 stdout # ln -s fd/2 stderr 问九贱大哥,这第一句是要把当前系统 的fd连接到fd上吗? Kendiv 回复于:2006-02-02 14:51:23 好文,学习! mobileman 回复于:2006-02-03 11:17:36 inux:/home/skynet/build-tools/buildroot # make menuconfig make -C package/config ncurses conf mconf make[1]: Entering directory `/home/skynet/build-tools/buildroot/package/config' make[1]: “conf”是最新的。 gcc -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -DCURSES_LOC=" mconf.c:104: error: static declaration of ‘current_menu’ follows non-static declaration lkc.h:63: error: previous declaration of ‘current_menu’ was here mconf.c: In function ‘conf_string’: mconf.c:583: warning: pointer targets in passing argument 2 of ‘sym_set_string_value’ differ in signedness mconf.c: In function ‘conf_load’: mconf.c:604: warning: pointer targets in passing argument 1 of ‘conf_read’ differ in signedness mconf.c: In function ‘conf_save’: mconf.c:625: warning: pointer targets in passing argument 1 of ‘conf_write’ differ in signedness make[1]: *** [mconf.o] 错误 1 make[1]: Leaving directory `/home/skynet/build-tools/buildroot/package/config' make: *** [package/config/mconf] 错误 2 linux:/home/skynet/build-tools/buildroot # newbie不知道什么问题,5555 独孤九贱 回复于:2006-02-09 17:39:19 引用:原帖由 独孤九贱 于 2006-1-10 09:10 发表 如果是读取所有的文件,而不是指定某个文件就更好了,因为每个人的机器的网卡是不同的! 参考楼上的脚本,以及朋友的帮助,终于可以让我那个启动网卡的C程序下课了: #!/bin/sh cd /etc/sysconfig/network-scripts/ for files in ifcfg-eth* do IFCFGPATH="/etc/sysconfig/network-scripts/$files" if [ ! -f $IFCFGPATH ] then continue fi while read line do line=${line%%=*} case $line in DEVICE) DEVICE=$(grep 'DEVICE' $IFCFGPATH) DEVICE=${DEVICE##*=} ;; IPADDR) IPADDR=$(grep 'IPADDR' $IFCFGPATH) IPADDR=${IPADDR##*=} ;; NETMASK) NETMASK=$(grep 'NETMASK' $IFCFGPATH) NETMASK=${NETMASK##*=} ;; GATEWAY) GATEWAY=$(grep 'GATEWAY' $IFCFGPATH) GATEWAY=${GATEWAY##*=} ;; esac done < $IFCFGPATH IPCOMMAND="/sbin/ifconfig $DEVICE $IPADDR netmask $NETMASK"^M if [ ! -z $IPADDR ] then $IPCOMMAND fi DEVICE="" IPADDR="" NETMASK="" done [ 本帖最后由 独孤九贱 于 2006-2-15 08:51 编辑 ] peterak47 回复于:2006-02-09 20:10:59 楼主真了不起!佩服 baizhiwen 回复于:2006-04-16 23:21:00 讲的和实际操作还是有区别,按照斑竹一步一步下来不成功,在buildtool目录下面根本不能make menuconfig kinglead 回复于:2006-04-18 09:58:59 好的,收藏了 谢谢 chinaandcompute 回复于:2006-07-10 15:17:27 hao meditchen 回复于:2006-07-17 16:07:01 牛人!! yyjjss 回复于:2006-07-18 14:24:04 楼主,你的网址现在已经禁止注册了,好可惜哦,我正在研究snort源代码,你上面好多资料可惜看不成 fatfatmaya 回复于:2006-07-18 16:05:35 我刚装了redhat9,选择text启动模式,但是敲了startx,不能进入xwindow啊,只能进入xterm,怎么办啊? xingrong_0598 回复于:2006-07-19 19:21:02 支持一下.:lol: taoyuetao 回复于:2006-07-20 09:04:36 真是好文章 Artist 回复于:2006-12-29 21:20:06 知其然不知其所以然 LZ能不能把大概的一个理论框架介绍一下,我刚刚接触嵌入式,始终觉得是在按照一个文档一部一部的做,具体自己在做什么为什么这么做还是比较模糊. 2599qiang 回复于:2007-05-24 16:50:31 [root@localhost buildroot]# make menuconfig make -C package/config ncurses conf mconf make[1]: Entering directory `/home/kendo/project/build-tools/buildroot/package/config' /usr/bin/ld: cannot find -lncurses collect2: ld returned 1 exit status >> Unable to find the Ncurses libraries. >> >> You must have Ncurses installed in order >> to use 'make menuconfig' make[1]: *** [ncurses] Error 1 make[1]: Leaving directory `/home/kendo/project/build-tools/buildroot/package/config' make: *** [package/config/mconf] Error 2 [root@localhost buildroot]# shdnzwy 回复于:2007-05-24 22:25:43 :D :D :D :D :D :em02: :em02: :em02: hsm88886 回复于:2007-05-25 07:27:07 高手,太好了,非常感谢共享! |
原文链接:http://linux.chinaunix.net/bbs/viewthread.php?tid=626904 转载请注明作者名及原文出处 |