亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
樓主: 獨孤九賤
打印 上一主題 下一主題

我也來學(xué)做嵌入式Linux系統(tǒng)V0.1(完整版) [復(fù)制鏈接]

論壇徽章:
0
11 [報告]
發(fā)表于 2005-10-15 21:45 |只看該作者

我也來學(xué)做嵌入式Linux系統(tǒng)V0.1(完整版)

thanks

論壇徽章:
0
12 [報告]
發(fā)表于 2005-10-19 10:57 |只看該作者

我也來學(xué)做嵌入式Linux系統(tǒng)V0.1(完整版)

好東東,收藏了!

論壇徽章:
0
13 [報告]
發(fā)表于 2005-10-19 11:08 |只看該作者

我也來學(xué)做嵌入式Linux系統(tǒng)V0.1(完整版)

謝謝了,copy到我的硬盤了

論壇徽章:
0
14 [報告]
發(fā)表于 2005-10-19 19:20 |只看該作者

我也來學(xué)做嵌入式Linux系統(tǒng)V0.1(完整版)

very good!

借鑒!學(xué)習(xí)中。

論壇徽章:
3
2015年迎新春徽章
日期:2015-03-03 17:23:07綜合交流區(qū)版塊每日發(fā)帖之星
日期:2015-08-19 06:20:00綜合交流區(qū)版塊每日發(fā)帖之星
日期:2015-09-15 06:20:00
15 [報告]
發(fā)表于 2005-10-23 10:51 |只看該作者

我也來學(xué)做嵌入式Linux系統(tǒng)V0.1(完整版)

Good job ~~!

LZ 太厲害啦

論壇徽章:
1
榮譽版主
日期:2011-11-23 16:44:17
16 [報告]
發(fā)表于 2005-10-23 19:11 |只看該作者

我也來學(xué)做嵌入式Linux系統(tǒng)V0.1(完整版)

收藏了,謝樓主

論壇徽章:
0
17 [報告]
發(fā)表于 2005-10-27 12:46 |只看該作者

我也來學(xué)做嵌入式Linux系統(tǒng)V0.1(完整版)

謝謝第一手資料,感動中流淚中..................!!!!!!!!!!!!!!!!!

論壇徽章:
0
18 [報告]
發(fā)表于 2005-11-01 10:34 |只看該作者

繼續(xù)補完

不好意思,最近工作太忙,好久沒有來搞這個東東了,加之心愛的手機丟了,心情又不太好,不過一切都過去了,繼續(xù)來將它補充完整。

修改啟動腳本
在前面寫rcS啟動腳本中。當(dāng)時只是為了系統(tǒng)能夠正常地啟動,在啟動網(wǎng)卡/路由/服務(wù)等時,有如下語句:
——————————————————————————————————————————————
#set lo ip address
ifconfig lo 127.0.0.1

#set eth0 ip address
#當(dāng)然,這樣子做只是權(quán)宜之計,最后做的應(yīng)該是在這一步引導(dǎo)網(wǎng)絡(luò)啟動腳本,像RedHat
#那樣,自動讀取所有指定的配置文件來啟動
ifconfig eth0 192.168.0.68 netmask 255.255.255.0

#set route
#同樣的,最終這里應(yīng)該是運行啟動路由的腳本,讀取路由配置文件
route add default gw 192.168.0.1
……
———————————————————————————————————————————————
這樣配置的最大壞處就是不能根據(jù)配置文件自定義,每次開機都定死了,現(xiàn)在來修改它,將這段語句刪除之,換成如下語句:
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結(jié)尾或沒有 sh后綴的。
這樣,我們在/etc/目錄下再新建一目錄start/,這里面就是我們啟動時需要的腳本的。先來啟動網(wǎng)卡。

修改網(wǎng)卡配置文件
我是根據(jù)Red hat的作法,把網(wǎng)卡配置放在/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目錄,建立網(wǎng)卡的啟動腳本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這個文件的內(nèi)容如下:
NETWORKING=yes
HOSTNAME=skynet
GATEWAY=88.88.88.2
2、在啟動網(wǎng)卡時,我使用了
#eanble ethernet interface
/usr/sbin/bootife
bootife是我自己寫的一個C程序,作用是讀取/etc/sysconfig/network-scripts/下面的ifcfg-ethXX文件,并配置之,本來這里就該用shell來完成更合適一點,無奈,偶shell功底實在差了一點(剛學(xué)幾天),就是想從Redhat中照抄過來,反復(fù)試了幾次也沒有成功。所以被逼無奈用C來完成之,后面我會附上我的C的源碼,也希望哪位大哥能夠?qū)懸欢蜸hell的程序代替它,放上來大家共享之。

修改路由啟動文件
同樣的,我在/etc/start下,建立新腳本S02route.sh,它的作用是啟動所有配置的靜態(tài)路由:
#!/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是一樣的,請參照建立此文件。

啟動服務(wù)程序
新建啟動腳本S03server:
#!/bin/sh
#------------------------------------------------------------------
#-- Source
#--     Author(s)        : kendo
#--                        Email: kendo999@sohu.com
#--                        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

很簡單,根據(jù)相應(yīng)變量的值,調(diào)用相應(yīng)的腳本。
1、這些啟動標志變量,我定義在了/etc/sysconfig/bootserver當(dāng)中,其內(nèi)容如下:
#start server on system boot
#1:yes  0:no
enable_httpd=1
enable_adsl=1
enable_udhcpd=1

2、每種服務(wù)對應(yīng)的腳本,我都放在了/etc/scripts下面。這些腳本,取決于你打算使用哪些服務(wù)程序了。腳本的來源,可以自己編寫,有可能其源碼中自帶有,也可以到網(wǎng)上查找……我就不再一一贅述了,

OK,基本上,腳本的修改就完成了,下一步,將是建立RamDisk。

——————————————————————————————————————————————
附,讀取網(wǎng)卡配置文件,啟動網(wǎng)卡的C源碼:
/************************************************************************
** author:kendo
** date:2005/10/26

***********************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <dirent.h>
#include <unistd.h>

#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))                /*這里,只啟動了以太網(wǎng)卡^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);        /*分析之,存入結(jié)構(gòu)ifcfg中*/
                        }
                }
                /*構(gòu)建相應(yīng)的命令*/
                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);
                        /*直接調(diào)用system來實現(xiàn),當(dāng)然也可以自己通過ioctl來設(shè)置,相應(yīng)源碼,我以前在c/c++版發(fā)過*/
                        system(buf);
                }
        }
        free(ife);
        return 0;
}

論壇徽章:
0
19 [報告]
發(fā)表于 2005-11-01 10:52 |只看該作者

  1.                 memset(buf,0,80);
  2.                 strcpy(buf,"/sbin/ifconfig");

  3.                 if(ifcfg->onboot)
  4.                 {
  5.                         sprintf(buf,"%s %s %s netmask %s broadcast %s",
  6.                                 buf,
  7.                                 ifcfg->device,
  8.                                 ifcfg->ip,
  9.                                 ifcfg->netmask,
  10.                                 ifcfg->br);
  11.                         /*直接調(diào)用system來實現(xiàn),當(dāng)然也可以自己通過ioctl來設(shè)置,相應(yīng)源碼,我以前在c/c++版發(fā)過*/
  12.                         system(buf);
復(fù)制代碼

兩個問題
1、從這段代碼看,實際調(diào)用了 /sbin/ifconfig 來完成網(wǎng)卡的設(shè)置,那么,這個程序是否必須用 root 來執(zhí)行?
2、為何不用 system("command") 呢?

論壇徽章:
0
20 [報告]
發(fā)表于 2005-11-01 11:03 |只看該作者

回復(fù) 19樓 platinum 的帖子

1、ifconfig本身運行,應(yīng)該不需要root吧?而至于在shell中的運行權(quán)限,要看看相應(yīng)的權(quán)限位了,事實上它已經(jīng)能夠在我的系統(tǒng)中很好的運行了,測試過很多次的。不過現(xiàn)在我的系統(tǒng),其實沒有用這種方法的,我是自己封裝了一個網(wǎng)卡管理的庫,也就是重寫了ifconfig,不過要把這些代碼發(fā)上來,太麻煩了,所以,就用了解system簡單了一點。

2、我不是很理解“為何不用 system("command") 呢?”這句話的含義,我用的是system(buf);你說的是不是為什么要去構(gòu)建一個buf,而不是直接用system("/sbin/ifconfig ethXX……")?清楚一點……^o^
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP