2012-08-22 5 views
0

리눅스에서 드라이버를 구현하고 싶습니다. 이더넷 스택이 있지만 하드웨어에서 나가는 데이터는 직렬 포트가 될 것입니다. 기본적으로 직렬 포트를 이더넷 드라이버로 등록하려고합니다. 이것이 가능한지 아무도 모른다. IPv6 및/또는 UDP 패킷을 직렬 포트 밖으로 밀어 내고 비슷한 방식으로 직렬 포트를 통해 패킷을 수신하고 이더넷 스택 위로 전달할 수 있기를 원합니다.이더넷 + 리눅스의 직렬 포트

직렬 포트를 이더넷 포트로 변환하는 외부 하드웨어의 직렬 - 이더넷 컨버터 (serial-to-ethernet converter) 솔루션을 사용하고 싶지는 않지만 내 PC 자체에 해당 솔루션을 사용하고 싶습니다.

직렬 포트를 통해 PPP를 시도했는데 제대로 작동합니다. 또한 PPP를 사용하여 FTP, HTTP 등을 할 수 있다고 들었습니다. 이에 대한 언급 - http://www.faqs.org/docs/Linux-HOWTO/Serial-Laplink-HOWTO.html

RealTek 이더넷 드라이버에서 직렬 드라이버로 코드를 해킹하려고했지만 많은 성공을 거두지 못했습니다. 오히려 나는 실제로 의미있는 일을하는 스택을 모른다. 조언, 안내 또는 자습서가 도움이 될 것입니다.

감사 아 디트

+0

PPP를 통한 직렬 포트 솔루션이 당신에게 적합하지 않은 이유가 있습니까? –

+0

이더넷이 패킷 지향 프로토콜이라는 근본적인 문제가 있지만 시리얼에는 패킷과 같은 것이 없습니다. 수신 측에서 패킷 경계를 재구성 할 수 있으려면 자체 패킷 프레임을 만들어야합니다. PPP를 사용해야합니다. – TJD

+0

이유는 "eth0"이더넷 드라이버로 등록해야합니다. 기본적으로 프로젝트는 그것에 대해 "직렬 포트"가 필요하지 않습니다. 바깥 세상에는 직렬 포트와 통신하지 않고 이더넷 포트로 보이지 않아야합니다 .-/ –

답변

0

당신은 네트워킹에 드 기본으로 돌아 가야 할 필요가, 당신이 질문을 이해하는 방식은 다음과 같습니다 "나는 시리얼 포트가 내가 사용하고자하는 이더넷 링크". 꿈을 깔아서 죄송하지만 실제 하드웨어가 없으므로 자세히 설명하겠습니다.

직렬 연결은 최소한 3 개의 전선 (적어도 tx, rx 및 접지)이 필요한 물리적 연결입니다. 논리적 측면에서는 바이너리 데이터를 이산 전압 범위로 표시되는 신호로 변환하는 IC가 있습니다.

이더넷은 레이어 2 프로토콜입니다. 레이어 1은 신호 (동축, 업, 광섬유 등)를 전송하는 데 사용되는 기술로 제공됩니다. 지금까지 보셨 듯이 다른 하드웨어 세트가 필요합니다. 논리적 이더넷 프레임을 디지털 번호의 스트림으로 변환합니다. 사실 이것은 콜 프레이밍입니다.

이더넷은 사용하기 쉬운 프로토콜 이었으므로 많은 네트워크 운영자에게 선호되는 프로토콜로 구현되었으므로 이더넷 링크를 통해 PPP 세션이있는 PPPoE가 가장 큰 프로토콜 중 하나입니다. 물론 이것은 여러분이 반대하는 것을 시도하고 있기 때문에 여러분의 모범과도 작동하지 않을 것입니다.

전 세계에서 항상 학습하고있는 경우 직렬 회선을 통해 자신의 이더넷 프레이머를 작성할 수 있습니다. 즉, 드라이버에 IEEE802.3을 구현해야하며 직렬 라인을 통해 비트 스트림으로 푸시하기 위해 데이터를 직렬화해야합니다.

  • 드라이버가 완전히 이더넷을 지원하는, 당신은 몇 가지 신호 (예를 들어, 자동 협상, CSMA/CD 등)
  • 을 구현하기 위해 하드웨어 수준에서 약간의 지원을 필요로 할 수 없습니다 : 물론 다음과 같은 단점을주의 115.2kbps의이

이럴 당신은 장치 드라이버를 네트워킹 분야에서 선택할 수 있습니다 더 흥미로운 프로젝트가 데이터 전송의 최고 속도가 어디에

  • 당신이 드라이버는 시간에 거의 쓸모 않는 돌아올 것이다. 예를 들어 NIC를 구입하고 장치 드라이버를 처음부터 개발하고 특정 영역을 최적화 할 수 있습니다. 마지막으로, 대부분의 이더넷 구현은 이제 하드웨어로 이루어 지므로 MAC 및 Voila의 몇 가지 레지스터를 채우지 않고도 아무 것도 할 필요가 없다는 점을 기억하십시오!

  • +0

    레이어 2와 레이어 1에 대한 내부 세부 정보를 보내 주셔서 감사합니다.하지만 OSI 모델에서는 상위 레이어는 하위 레이어가 어떤 역할을하는지 전혀 알지 못합니다. 상위 레이어는 헤더 (그리고 아마도 꼬리)를 추가 한 후 데이터를 전달합니다. 유사한 라인에서 패킷이 레이어 2에 프레임되면, 레이어 1에 비트 시퀀스가 ​​전송됩니다. 이것이 내가 이용하려고하는 것입니다. 이더넷 패킷을 만들고 내 레이어 1 (UART/직렬 포트)이 전송을하도록하십시오. 직렬 포트에 이더넷 장치로 등록 된 부분은 해킹하고 싶은 부분입니다. –

    +0

    레이어 1과 레이어 2의 차이점은 USB가 인기를 얻었다는 것입니다. ADSL 모뎀이 인기가 있었고 사람들이 자신의 PC에 10/100 이더넷 LAN 포트가 없기 때문에 USB 포트를 사용하여 연결할 수 있었고 모뎀은 여전히 ​​10/100 LAN 포트로 표시되었습니다 [비슷한 우리가 동일한 물리적 장치 (USB 엄지 드라이브, 프린터, USB HDD, USB 마우스, 키보드)를 통해 다른 것들을 보내거나받을 수 있기 때문에 USB가 인기를 얻었습니다. 이더넷 프레임에서 NIC의 MAC 주소가 필요합니다. 이더넷 헤더에 저장됩니다. (나는 직렬 드라이버가 이것을 가지고 있다고 생각하지 않는다!) –

    0

    SLIPPPP은 이미 원하는대로 할 수 있습니다.