이 영역을 누르면 첫 페이지로 이동
butter_shower 블로그의 첫 페이지로 이동

butter_shower

페이지 맨 위로 올라가기

butter_shower

Computer Engineering/임베디드 시스템

  • butter_shower
리눅스 디바이스 드라이버 프로그래밍(4) - ioctl 함수, blocked 입력

리눅스 디바이스 드라이버 프로그래밍(4) - ioctl 함수, blocked 입력

2019.06.13
ioctl() 시스템 호출 ioctl은 "입출력 제어(I/O control)"의 줄임말로, read(), write() 이외의 장치에 특화된 입출력, 제어 동작을 수행하고자 할 때 사용되는 시스템 호출이다. 하드웨어에 데이터를 쓰거나 읽어올 때, 일반적인 R/W 함수의 동작만으로는 하드웨어의 동작 상태에 따라 처리되지 못하는 데이터가 종종 발생하기 때문에 리눅스 커널에서는 ioctl을 제공한다. ioctl 함수는 read나 write 작업도 처리할 수 있지만, 하드웨어의 제어나 상태를 얻기 위해 주로 사용되는 함수이다. #include int ioctl(int fd, int cmd, ...); cmd 인수로 수행할 동작 지정 추가적인 인수 사용 가능 ioctl() 시스템 호출의 구현 ioctl 함수는 o..
리눅스 디바이스 드라이버 프로그래밍(3) - 7segment led 예제 fpga에 적용시켜보기

리눅스 디바이스 드라이버 프로그래밍(3) - 7segment led 예제 fpga에 적용시켜보기

2019.06.13
내가 학교 실습시간에 사용한 키트는 DE1-SoC로, microSD카드에 리눅스를 넣어 사용하였다. 이전 포스팅을 참고하면 이해하는데 조금 도움이 될 것이다. 2019/06/12 - [임베디드 시스템] - 리눅스 디바이스 드라이버 프로그래밍(2) - 모듈 프로그래밍 리눅스 디바이스 드라이버 프로그래밍(2) - 모듈 프로그래밍 커널 모듈 (Kernel Module) 시스템 부팅 후에 동적으로 loading 할 수 있는 커널 구성 요소를 말한다. 커널을 다시 컴파일하거나 시스템 재부팅 할 필요 없이 커널의 일부분을 교체하는 것이 가능하다 디바이스.. butter-shower.tistory.com 7 segment LED 출력 장치 예제 코드 6개의 7 segment LED 출력장치를 /dev/hex 문자 장..
리눅스 디바이스 드라이버 프로그래밍(2) - 모듈 프로그래밍

리눅스 디바이스 드라이버 프로그래밍(2) - 모듈 프로그래밍

2019.06.12
커널 모듈 (Kernel Module) 시스템 부팅 후에 동적으로 loading 할 수 있는 커널 구성 요소를 말한다. 커널을 다시 컴파일하거나 시스템 재부팅 할 필요 없이 커널의 일부분을 교체하는 것이 가능하다 디바이스 드라이버, 파일 시스템, 네트워크 프로토콜 등이 모듈로 제공된다. 일반 응용 프로그램과 뭐가 다른거지? 커널 모듈은 일반 응용 프로그램과 달리 main 함수가 없다. 대신에 커널에 로딩 및 제거될 때 불러지는 함수가 존재하는데, 이는 아래와 같다. Loading 시 : module_init() 로 지정된 함수 호출 Unloading 시 : module_exit() 로 지정된 함수 호출 리눅스 디바이스 드라이버의 특성 1) 커널 코드 디바이스 드라이버는 커널의 한 부분이므로, 커널의 다른..
리눅스 디바이스 드라이버 프로그래밍(1) - 디바이스 드라이버 개요, 디바이스 드라이버 종류

리눅스 디바이스 드라이버 프로그래밍(1) - 디바이스 드라이버 개요, 디바이스 드라이버 종류

2019.06.12
Device와 Device Driver Device 네트워크 어댑터, LCD 디스플레이, 오디오, 터미널, 키보드, 하드디스크, 플로피디스크, 프린터 등과 같은 주변 장치들을 말함. 디바이스의 구동에 필요한 프로그램, 즉 디바이스 드라이버가 필수적으로 요구됨 Device Driver 실제 장치 부분을 추상화시켜 사용자 프로그램이 정형화된 인터페이스를 통해 디바이스를 접근할 수 있도록 해주는 프로그램 디바이스 관리에 필요한 정형화된 인터페이스 구현에 요구되는 함수와 자료구조의 집합체 표준적으로 동일 서비스 제공을 목적으로 커널의 일부분으로 내장 응용 프로그램이 하드웨어를 제어할 수 있도록 인터페이스 제공 하드웨어 독립적인 프로그램을 작성할 수 있도록 함. 리눅스 디바이스 드라이버 사용자 관점에서의 디바이스..
임베디드 리눅스 커널 프로그래밍(3) - 시스템 호출 함수 구현

임베디드 리눅스 커널 프로그래밍(3) - 시스템 호출 함수 구현

2019.06.12
시스템 호출(System Call)이란? 시스템 호출(system call)은 운영 체제의 커널이 제공하는 서비스에 대해 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스다. 보통 C나 C++과 같은 고급 언어로 작성된 프로그램들은 직접 시스템 호출을 사용할 수 없기 때문에 고급 API를 통해 시스템 호출에 접근하게 하는 방법이다. 시스템 호출 과정 시스템 호출의 구현 시스템 호출을 구현하는 sequence는 위와 같다. 아래는 sys_hello라는 시스템 호출 함수를 만드는 예시이다. 1) 시스템 호출 함수 정의 Kernel 소스의 kernel 디렉토리에 시스템 호출 함수를 정의한 프로그램 파일 (hello.c) 생성 #include asmlinkage void(sys_hello(){ pri..
임베디드 리눅스 커널 프로그래밍(2) - 커널 데이터타입, 커널 인터페이스 함수

임베디드 리눅스 커널 프로그래밍(2) - 커널 데이터타입, 커널 인터페이스 함수

2019.06.11
커널 Data Type 커널에서는 C언어의 원래 자료형 대신에 typedef로 정의된 자료형이 많이 사용된다. 커널에서 여러 종류의 값을 나타나는 데에 int나 long 등을 사용하는 대신 접미사 _t로 끝나는 자료형을 많이 사용한다. pid_t, uid_t, gid_t, dev_t, size_t, ... 에 정의되어 있음 데이터의 크기를 명시적으로 표현한 자료형도 사용한다. u8, u16, u32, s8, s16, s32 (커널 코드에서만 사용 가능) u -> unsigned / s -> signed 사용자 프로그램에서는 __u8, __s8과 같이 _를 두 개 붙여서 사용함 에 정의되어 있음 Kernel Interface 함수 커널 프로그램은 일반적인 라이브러리를 사용하지 못하고 커널에서 export한..
임베디드 리눅스 커널 프로그래밍(1) - application 프로그래밍과 커널프로그래밍의 차이점, 커널프로그래밍 시 주의사항

임베디드 리눅스 커널 프로그래밍(1) - application 프로그래밍과 커널프로그래밍의 차이점, 커널프로그래밍 시 주의사항

2019.06.11
Kernel Programming 이란? 커널 모드에서 수행하는 프로그램을 작성하는 것을 말한다. 커널 프로그래밍의 종류는 아래와 같다. Linux Kernel core 기능 추가 Linux Kernel 알고리즘 개선 Linux Kernel 모듈 프로그래밍 - 커널 컴파일 필요 없음 (나는 주로 세번째인 모듈 프로그래밍을 했다. 나머지는 차차 포스팅 할 예정) Kernel Programming vs Application Programming 수행 방법에서의 차이 Application program : 처음부터 순차적으로 수행함 Kernel : 응용 프로그램이 호출한 system call이나 interrupt handler를 수행하기 위해 비동기적으로 수행함 라이브러리 Application program ..
ABI와 EABI

ABI와 EABI

2019.06.11
ABI (Application Binary Interface)란 응용 프로그램과 운영체제 또는 라이브러리와의 표준화된 인터페이스를 제공하는 것을 말한다. ABI는 서로 다른 컴파일러가 만든 오브젝트 파일을 연결하여 사용할 수 있게 한다. Application 간 binary 데이터를 어떻게 교환하는지 다음과 같은 규칙들을 정한다. 데이터 타입과 정렬방법 함수 호출 시 인수 및 결과에 대한 레지스터 교환 방법 시스템 콜 호출 방법 프로그램 코드의 시작과 데이터에 대한 초기화 방법 파일 교환 방법 (ELF 등) API랑 뭐가 다른거지? ABI는 API보다 저수준(binary)란 점. 그리고 API는 소스코드에서 사용되고 ABI는 바이너리에서 호환이 된다는 점에서 다르다. 아키텍쳐와 운영체제마다 조금씩 차이가..
툴체인(Tool Chain)이란

툴체인(Tool Chain)이란

2019.06.11
Tool Chain 툴체인(Tool Chain)이란 소프트웨어 개발에 사용되는 프로그래밍 도구의 집합이다. 대게 크로스 컴파일 환경을 듯한다. 간단한 툴체인은 소스 코드 편집을 위한 문서편집기와 소스 코드를 실행 프로그램으로 변환하는 컴파일러와 링커, 그리고 운영체제의 기능을 제공하는 라이브러리로 구성된다. 비디오 게임과 같은 복잡한 제품에서는 소리 효과와 음악, 텍스처, 3차원 모델, 애니메이션 등을 위한 개발 도구가 필요하며, 이를 한데 모아 완성된 제품으로 만드는 개발 도구도 있어야 한다. GNU Tool Chain GNU 툴체인은 GNU 프로젝트가 만든 프로그래밍 도구의 집합을 가리키는 용어다. 이러한 도구들은 응용 소프트웨어와 운영체제를 개발하는데에 쓰이는 툴체인을 형성한다. GNU 툴체인에는 ..
임베디드 시스템 - 교차 개발 환경(JTAG에 관하여)

임베디드 시스템 - 교차 개발 환경(JTAG에 관하여)

2019.06.11
왜 교차개발 환경을 사용할까? 여기서 target 시스템을 우리가 만든 프로그램을 올리고싶은 보드라고 생각해보자. (FPGA 같은 거?) 커널을 올리기 전에는 target 시스템엔 아무 프로그램도 올라가있지 않는다. target 시스템은, 생각해보라. 일반적으로 메모리 용량이 매우 적어서 컴파일러를 포함한 프로그램 개발 환경을 올리기가 어렵다. 그래서 임베디드 시스템 개발을 할 때에는 교차 개발 환경을 사용한다 (!) 교차 개발 환경은 말 그대로 target 시스템 용 프로그램을 별도의 host 시스템에서 개발하는 환경이란 뜻이다. host와 target에 사용되는 프로세서가 다른 경우, 컴파일러의 실행은 host에서 되지만 실행 코드는 target system에서 실행된다. 교차 개발 환경에서 작업을 ..
  • 최신
    • 1
  • 다음

정보

butter_shower 블로그의 첫 페이지로 이동

butter_shower

  • butter_shower의 첫 페이지로 이동

검색

메뉴

  • All Categories
  • About Me
  • Guest Book

카테고리

  • 전체보기 (223)
    • 💫 주인장 이야기 (17)
    • 🌱 와글와글뻘글 (27)
    • IT Trends (11)
    • 주인장 일상 (0)
    • 📒 내 마음대로 독서 서평 (12)
    • 머신러닝 꿈나무 (30)
      • 기본 개념 (6)
      • Hands-on! (5)
      • Paper Review (5)
      • 캐린이의 Kaggle (1)
    • 알고리즘 Algorithm (33)
      • PS (8)
    • Computer Engineering (75)
      • Python (8)
      • Cloud Computing (9)
      • C (9)
      • C++ (0)
      • Java (6)
      • Django 장고 (4)
      • 임베디드 시스템 (10)
      • 병렬 처리(Parallel Processing) (9)
      • 데이터 통신 Data communication (4)
      • 유닉스 시스템 (Unix System) (3)
      • GitHub (1)
      • 마이크로 프로세서 (micro processor) (1)
      • 데이터 마이닝 (1)
    • Error Note 🚨 (3)
    • 영어 공부 (6)
      • Live Academy (6)
    • HOBBY (2)
      • Film Log (2)

최근 글

정보

_rian의 butter_shower

butter_shower

_rian

나의 외부 링크

  • Github
  • Facebook
  • Instagram
  • LinkedIn
  • Twitter

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. © _rian. Designed by Fraccino.

티스토리툴바