0

라즈베리 파이 (raspian), 비글 본 (debian) 또는 내 랩톱 (우분투)에 설치되고로드 된 일부 장치 드라이버의 소스 파일을 연구하고 싶습니다.장치 드라이버 원본 파일을 조사 하시겠습니까?

제 목표는 실제로 작동하는 일부 드라이버의 소스 파일을 연구하여 모듈을 올바르게 구현하는 방법을 배우는 것입니다.

저는 실제 하드웨어 (USB, I2C, SPI, UART 등)와 통신하는 드라이버에 특히 관심이 있습니다.

누군가이 소스를 찾는 방법을 말해 줄 수 있습니까?/usr/src/****와 같은 특정 폴더에서 사용할 수 있습니까? 아니면 특정 커널 릴리스의 모든 커널 소스 파일을 다운로드해야합니까?

모든 조언, 의견 및 권장 사항을 높이 평가합니다.

p.s "Linux Kernel Development 3rd edition"을 읽었으나 다른 무료/오픈 소스 책을 알고 있는지 알려주십시오.

안부 헨릭

답변

5

리눅스 소스 디렉토리 설명 :

  • 아치/- 아치 서브 디렉토리는 모든 아키텍쳐에 종속적 인 커널 코드가 포함되어 있습니다./

    Example : 
    1. 'arch/arm/' will have your board related configuration file. 
        like 'arch/arm/mach-omap/' will have omap specific source code. 
    2. 'arch/arm/config' Generates a new kernel configuration with the 
        default answer being used for all options. The default values 
        are taken from a file located in the arch/$ARCH/defconfig 
        file,where $ARCH refers to the specific architecture for which 
        the kernel is being built. 
    3. arch/arm/boot have kernel zImage, dtb image after compilation. 
    
  • 블록 - 이 폴더는 블록 디바이스 드라이버 코드를 보유하고 있습니다. 블록 장치는 블록 단위로 데이터를 송수신하는 장치입니다. 데이터 블록은 연속적인 스트림 대신 데이터의 덩어리입니다.

  • crypto/- 이 폴더에는 다양한 암호화 알고리즘의 소스 코드가 들어 있습니다.

    example, “sha1_generic.c” is the file that contains the code for 
          the sha1 encryption algorithm. 
    
  • 문서/- 그것은 텍스트 형식으로 커널 관련 정보가 있습니다.

  • drivers/- 시스템의 모든 장치 드라이버가이 디렉터리에 있습니다. 그것들은 디바이스 드라이버 클래스들로 더 세분화된다.

    Example, 
    1. drivers/video/backlight/ has blacklight driver source which 
        will control display brightness. 
    2. drivers/video/display/ has display driver source. 
    3. drivers/input/ has input driver source code. like touch, 
        keyboard and mouse driver. 
    4. drivers/char/ has charter driver source code. 
    5. drivers/i2c/ has i2c subsystem and driver source code. 
    6. drivers/pci/ has pci subsytem and driver related source code. 
    7. drivers/bluetooth has Bluetooth driver file. 
    8. drivers/power has power and battery driver. 
    
  • 펌웨어/- 펌웨어 폴더는 컴퓨터가 읽고 장치에서 신호를 이해할 수 코드가 포함되어 있습니다. 예를 들어, 웹캠은 자체 하드웨어를 관리하지만 컴퓨터는 웹캠이 컴퓨터를 보내는 신호를 이해해야합니다.

  • FS/- 파일 시스템 코드의 모든. 이 디렉토리는 지원되는 파일 시스템 당 하나씩 디렉토리 (예 : vfat 및 ext2)로 다시 세분화됩니다.

  • 커널/- 이 폴더의 코드는 커널 자체를 제어합니다. 예를 들어 디버거가 문제를 추적해야하는 경우 커널은이 폴더의 소스 파일에서 시작된 코드를 사용하여 커널이 수행하는 모든 작업을 디버거에 알립니다. 시간을 추적하기위한 코드도 있습니다. 커널 폴더에는 "power"라는 디렉토리가 있습니다. 이 폴더의 일부 코드는 컴퓨터를 다시 시작하고 전원을 끄고 일시 중단 할 수있는 기능을 제공합니다.

  • 순/- 순 커널의 네트워킹 코드입니다. lib 이 디렉토리에는 커널의 라이브러리 코드가 들어 있습니다. 아키텍처 관련 라이브러리 코드는 arch/*/lib /에서 찾을 수 있습니다. scripts 이 디렉토리에는 커널을 구성 할 때 사용되는 스크립트 (예 : awk 및 tk 스크립트)가 들어 있습니다.

  • lib/- 이 디렉토리에는 커널의 라이브러리 코드가 들어 있습니다. 아키텍처 관련 라이브러리 코드는 arch/*/lib /에서 찾을 수 있습니다.

  • 스크립트/- 이 디렉토리는 커널을 설정하는데 사용되는 (예를 들어 awk 나 tlk 스크립트) 스크립트가 포함되어 있습니다.

  • mm/- 이 디렉토리에는 모든 메모리 관리 코드가 들어 있습니다. 아키텍처 특정 메모리 관리 코드는 arch/*/mm /에서 실행됩니다 (예 : arch/i386/mm/fault.c).

  • ipc/- 이 디렉토리에는 커널 간 프로세스 통신 코드가 들어 있습니다.

  • ** init/- ** init 폴더는 커널의 시작 (INITiation)을 다루는 코드를 가지고 있습니다. main.c 파일은 커널의 핵심입니다. 이것은 다른 모든 파일을 연결하는 주요 소스 코드 파일입니다.

  • sound/- 이것은 모든 사운드 카드 드라이버가있는 곳입니다.

는 몇 디렉토리 인증서에서, 암호화, 보안, 포함, VIRT 및 USR 등 ....

있습니다
0

신경 쓰지 마, 내가

에서 소스 파일을 발견
~/linux/drivers/ 

예 :

nano ~/linux/drivers/spi/spi-bitbang.c 

죄송합니다, 불편을 끼쳐 드려!

2

커널 관련 소스를 보는 데 사용하는 몇 가지 다른 방법이 있습니다. 거기에는 몇 가지 다른 좋은 방법이 있습니다. 당신은 방법이 대체로 동일하다는 것을 알게 될 것입니다.

  1. kernel.org으로 이동하여 원하는 커널을 다운로드하십시오. 드라이버 관련 소스는 /<path to your downloaded kernel>/drivers에 있습니다. 예를 들어, 커널 4.5.5를 /usr/src/linux-4.5.5에 다운로드하고 추출한 후 /usr/src/linux-4.5.5/drivers을 통해 내 드라이버의 소스에 액세스합니다.

  2. Linux 상호 참조 웹 사이트를 사용하십시오. 개인적으로 나는 free-electrons에 호스팅 된 것을 사용합니다. 이 웹 사이트는 자유 텍스트 또는 식별자 검색에 적합합니다.

  3. 리누스 토발즈의가 github에서 호스팅됩니다.