2013-06-06 2 views
-2

저는 BusyBox가있는 Linux가 설치된 임베디드 장치에서 작업하고 있습니다. 고정 IP 주소를 설정하기 위해 명령 줄 도구를 제공해야합니다. 몇 가지 제한 사항이 있습니다. 시스템이 재부팅 할 때이 길을 잃기 때문에 일을 할 수 없습니다 ifconfig를 사용임베디드 리눅스에서 IP 주소를 설정하는 방법은 무엇입니까?

  1. .
  2. 매우 제한된 리소스로 GUI가 없습니다.
  3. Linux 구성 파일을 수정하는 텍스트 편집기는 vi입니다. 그러나 여하튼 그것은 받아 들여지지 않았다. 고객은 vi을 사용하는 방법이나 Linux에 대한 더 깊은 이해를 전혀 모르고 있기 때문입니다. "ConfigMyIP 192.168.0.1 255.255.255.0"과 같은 것을 누를 수 있도록 도구를 제공해야하며 작업이 완료되었습니다.

어떻게 할 수 있습니까? (shell 또는 C 또는 둘 다 사용)

+0

수정해야 할 구성 파일과 그 파일에서 수정해야 할 부분을 알고있는 것으로 보이며 수정을 위해 GUI를 제공하는 방법을 묻는 것입니다. 그렇다면 프로그래머만큼이나 많은 대답이있을 것입니다. FWIW, 나는 Tcl/Tk 스크립트로 그것을 할 것이다; 상자에없는 경우 개인적으로 스크립트를 작성하고 싶지 않을 때 거의 한 시간이 지나야 설치됩니다. – nurdglaw

+0

@nurdglaw 아니야. 임베디드 장치의 제한된 자원 때문에 GUI가 없습니다. 쉘만 있습니다.나는 Tcl/Tk에 익숙하지 않지만 새로운 소프트웨어를 설치하는 것도 옵션이 아니다. –

+0

상자에 웹 서버가 있습니까? 고객이 GUI를 실행할 것으로 예상되는 시스템은 무엇입니까? 그것이 상자가 아닌 경우, 그 시스템은 상자와 어떻게 통신합니까? (상자의 "임베디드 장치"읽기 :-)) – nurdglaw

답변

0

사용자가 원하는 IP 주소를 입력하라는 메시지를 원하는 언어로 작성하지 않으시겠습니까? 그런 다음 기존 구성 파일을 백업 버전에 복사하고 한 번에 한 줄씩 백업 버전을 읽어 새 구성 파일을 만듭니다.

줄에 IP 주소가 지정되어 있으면 버리고 새 줄을 쓰십시오. 새 IP 주소를 지정하십시오. 그렇지 않으면 기존 줄을 작성하십시오.

고객이 질문에 표시된 것처럼 명령 줄에서 매개 변수를 입력하는 것이 중요하다면 명령 줄 인수에 액세스하려면 haw를 보려면 선택한 언어의 설명서를 살펴보십시오. C를 사용하는 경우 main에 전달되는 argcargv 인수를 살펴보십시오.

2

나는 스스로 다른 해결책을 찾았다. 일반적인 생각은 시스템 init 디렉토리에 IP 주소를 설정할 수있는 쉘 스크립트를 만드는 것입니다.

이 프로그램은 "192.168.0.1 255.255.255.0을"같은 인수와 함께 실행 된
#include <stdio> 
#define MAXBUF 100 

int main(int argc, char** argv) 
{ 
    FILE* f; 
    char content[MAXBUF]; 
    f = fopen("/etc/init.d/configip", "w+"); 
    strcat("#!/bin/sh\n", content); 
    strcat("ifconfig ", content); 
    strcat(argv[1], content); 
    strcat(" ", content); 
    strcat(argv[2], content); 
    strcat(" up", content); 
    fwrite(content, 1, strlen(content) + 1, f); 
    fclose(f); 
    return 0; 
} 

, 그것은 etc/init.d에서 쉘 스크립트를 생성합니다 :

#!/bin/sh 
ifconfig 192.168.0.1 255.255.255.0 up 

스크립트는 모든로드됩니다 여기 코드는 시간 리눅스 부팅.

+0

예,하지만 사용자 입력의 유효성을 검사해야합니다. 그렇지 않으면 명령이 실패 할 수 있습니다. 예를 들어, 잘못된 넷 마스크 값 o lan 외부의 게이트웨이. –

+0

@OttavioCampana 좋은 지적. 나는 더 많은 검증을 추가 할 것이다. 그러나 단순성을 위해 여기서 코드를 업데이트하지 않겠습니다. –

0

잘 이해하면 목표는 BusyBox입니다.

그럼 사용자가 해당 구성 파일을 영구적으로 수정할 수 있도록 "간단한 인터페이스"를 제공하기 위해 custom applet을 추가하지 않으시겠습니까?

이 옵션은 매우 제한된 환경의 외부 프로그램보다 적합 할 수 있다고 생각합니다.

관련 문제