디바이스 드라이버 작업을 하다 보면 자주 보게 되는 매크로중으 히나가바로 container_of 매크로 입니다.이해가 가는 것 같기도 하고 아니것 같기도 하고 묻는 사람도 있고 해서오늘은 이 매크로에 대해서 한번 알아 볼가 합니다. 일단 함수 원형을 한번 볼까요? lxr 사이트에서 긁어 왔습니다.위치는 include/linux/kernel.h 입니다. 650#define container_of(ptr, type, member) ({ \ 651 const typeof( ((type *)0)->member ) *__mptr = (ptr); \ 652 (type *)( (char *)__mptr - offsetof(type,member) );}) 이건 뭐 상당히 거시기 하군요.뜯기 전에 좀 쉬운 예를 들어 보..
디바이스 트리 작성법 (4편) 7고급 주제들 7.1 복잡한 샘플 장치 지금까지 디바이스 트리를 이해하기 위한 기본적인 정의만 다루었습니다. 이제 좀 더 디바이스 트리를 완벽하게 사용하기 이해서 좀 더 복잡한 하드웨어를 샘플에 추가 할 필요가 있습니다. 이런 복잡한 하드웨어로 PCI 호스트 브릿지를 추가해 보겠습니다. 이 샘플 용 PCI 호스트 브릿지는 0x10180000 를 제어 레지스터 주소로 갖고 0x80000000 주소를 BARs 영역의 시작 주소를 갖는 것으로 가정합니다. 지금까지 사용한 예에 다음과 같은 PCI 호스트 브릿지 노드를 추가하는 것으로 설명을 시작하겠습니다. pci@10180000 {compatible = "arm,versatile-pci-hostbridge", "pci";reg =..
디바이스 트리 작성법 (3편) 4. 인터럽트 처리 방법 디바이스 트리 구조내에서 디바이스들은 트리 구조로 계층화 표현이 가능합니다. 인터럽트는 이런 계층 구조가 곤란 합니다. 보통 인터럽트는 디바이스의 하드웨어가 인터럽트를 발생하고 인터럽트 컨트롤러가 해당 신호를 수신하는 구조로 되어 있습니다. 그래서 인터럽트는 디바이스 트리의 구조와 별도로 디바이스 노드간에 링크 구조로 표현됩니다. 인터럽트는 디바이스 노드의 속성의 형태로 표현합니다. 네개의 속성이 인터럽트 간의 연결을 표현하기 위해서 준비 되어 있습니다.다음은 네개의 속성에 대한 간단한 설명입니다. - interrupt-controller 속성interrupt-controller 속성 은 값이 없는 빈 속성으로 해당 노드의 디바이스가 인터럽트 신호를..
디바이스 트리 작성법 (2편) 3주소지정 방법디바이스의 주소를 디바이스 트리에 표현하기 위해서 정해진 속성에는 다음 세가지가 있습니다. #address-cells#size-cellsreg이 속성은 서로 연관 관계를 가지고 있습니다. "#address-cells" 속성과 "#size-cells" 속성은 reg 속성의데이터에 대한 갯수 규칙을 지정합니다. "#address-cells" 속성과 "#size-cells" 은 부모 노드에서 지정하고 reg 속성 은 자식 노드에 지정합니다. 우선 reg 속성에 대해서 알아 보겠습니다. reg 속성은 다음과 같은 형식을 가집니다. "reg = "주소와 길이가 하나의 묶음이 됩니다. 보드에 있는 디바이스를 제어하기 위해서 하나의 주소일수도 있고 여러개의 주소를 가지고 ..
디바이스 트리 작성법 (1편) 이 문서는 디바이스 트리 작성법을 설명한 http://devicetree.org/Device_Tree_Usage 웹 문서를 번역 및 의역한 것입니다. 오역 및 잘못된 내용이 있을 수 있습니다. 제목 : 디바이스 트리 작성법 이 문서는 새로 만들 하드웨어에 대한 디바이스 트리를 어떻게 작성하는지를 다룹니다. 이 문서가 작성된 목적은 디바이스 트리에 대한 개념을 설명하고 디바이스 트리에 디바이스를 어떻게 표현하는 가를 설명한 것입니다. 이 문서는 가장 기본적인 내용만 다루고 있기 때문에 더 자세한 디바이스 트리의 데이터 포맷이 알고 싶다면 ePAPR 기술 설명서를 참고 하는 것이 좋습니다. 목차 1.기본 데이터 형식2.기본적인 개념2.1장치예2.2 최초 구조체2.3 CPU들 2..