본문 바로가기

개발 이야기/리눅스 개발

(우분투) 지원되지 않는 최신 하드웨어 드라이버 인식 시키는 방법

728x90

우분투 배포판을 사용하다보면

간혹가다가 보면 BT나 Wifi 같은 경우 최신 하드웨어를 가지고 있거나

특별난 제조사의 하드웨어를 가진 PC나 노트북에

아무 생각없이 우분투 배포판을 설치했을 때,

 

간혹가다 배포판이 지원하지 않는 BT나 Wifi하드웨어가 있을 수 있습니다.

이럴때 좀 난감한데,

     저의 경우 최소한 우분투 커널 용으로 지원되는 해다 하드웨어에 맞는 깃허브를 제공하는 경우가 있습니다. 

 이럴 경우 아래 링크와 같이,

 => cafe.daum.net/opensupport.xyz/qCBd/23

 

 해당 깃허브에서 하드웨어 드라이버 소스를 받아서 컴파일해서 

 디바이스드라이버 모듈을 빌드하고 insmod/modprobe해서 모듈을 올려주면 됩니다.

 

좀 개발자적 요소가 강하지만 리눅스 하드우저들은 쉽게 할 수 있을 겁니다.

위에 설명한 예를 터미널에서 아래와 같이 하면 됩니다. 일예로요~

 

sudo apt update
sudo apt install -y dkms git
git clone "https://github.com/tomaspinho/rtl8821..."
cd rtl8821ce
sudo ./dkms-install.sh
sudo modprobe 8821ce

 

위와 같이요~ 부언하면, 빌드 시 dkms-install.sh을 실행하면 간단히 해결됩니다.

(따져보면, 개발 요소보다 리눅스 유저들의 유틸리티 속성이 더 강합니다.)

그래서 블로깅하는중~

 

그런데 또 다른 방법이 있더군요.

간단히 요약하면 AUR 이라는 아치리눅스의 패키지가 있는데

여기에는 최신의 하드웨어를 지원하는 하드웨어의 펌웨어나 디바이스 드라이버 모듈을 제공합니다.

최신으로~ 최신으로~

 

그래서 여기서 해당 문제가 있는 (예를들면, 우분투에서~) 배포판에서

이 펌웨어와 드라이버모듈을 AUR로 부터 다운받아

자신의 배포판에 맞는 path와 해당 모듈의 이름으로 변경만하시면

사용할 수 있습니다.

 앗, 그런데 물론 사용하시려는 배포판의 커널 버전이 맞는 것으로 다운받아야 합니다.

 

장황하게 글로 썼는데 두번째 방법의 일례를 들면 아래 링크를 참고하세요.

=> kibua20.tistory.com/170 

 

위 링크는 우분투에서 BT 5.0 USB 동글 사용 시에 해당 펌웨어가 지원되지않아

링크 내용대로 AUR에서 펌웨어를 커널 버전에 맞는 걸로 다운받아

아치리눅스의 그것이 아닌 해당 우분투 버전의 펌웨어 위치, path로 펌웨어 name을 변경하여

copy해 넣어서 사용한 예입니다.

 

 

아치리눅스가 최신의 하드웨어, 드라이버, 펌웨어를 지원하는 배포판이다보니

다른 배포판에서 아치리눅스의 패키지인 AUR (Arch User Repository)를 이용할 수 있는 장점이 있는 것 같습니다.

 

저도 요즘 아치리눅스는 간만 보고 있는데, 

리눅스 파워 유저들은 아치리눅스를 많이들 사용하나 봅니다. 롤링릴리즈라는 장점도 있고요~

저도 나중에 함 사용해보려고 하는데 물건(?)이 안생기네요 ^^

 

 

(사족)

두번째 방법이 가능한 원리를 개발적인 측면에서 서술해 봤습니다. 최대한 쉽게요~

다음과 같이요,

 

 => dtb 가 리눅스 커널 컴파일 없이 해당 보드 hw configuration을 지원하는 구조인 걸로 압니다. 그래서 bootloader에서 해당 configuration 인 dtb를 특정 메모리번지로 로드하고 그 다음 리눅스 커널이 그 메모리에 따라 보드를 제어하게 되어 있는데요,,,,커널 컴파일이 따로 필요없이~

그리고 bt나 wifi의 펌웨어 파일인 bin같은 바이너리들과 또 그 하드웨어를 드라이빙할, 특정 버전의 리눅스 커널의 커널 모듈 ko들이 있는데요~

이런 것들이 AUR에 최신으로 업데이트 되고 있는 건가보네요? 맞나요?

그럼 다른 리눅스 배포판들도 커널 버전만 맞는다면, 원하는 회신하드웨어의 드라이버모듈이 없어도 또는 해당 하드웨어 펌웨어가 최신이 아니라도~ ~~

AUR에서 최신 펌웨어와 드라이버모듈을 pacman 또는 apt로 다운받아 해당 배포판의 위피에 맞춰서 copy해주면 바로 사용할 수 있는거죠??? (그래서 AUR매니아가 ~~~)

앗, 그런데 다른 질문인데요~ dtb가 해당보드의 hw config는 가능한 것 알겠는데,,,

"최신 커널의 경우 rtl8761b fw blob을 불러오는 루틴"을 언급하신 것보니,,,
펌웨어 blob (bin같은 바이너리 같은,,,) 을 AUR에서 받으면,
자신의 사용하는 배포판에서 별도로 커널 소스에서 호출해서 로드 하는 구조인가요? (배포판별로 커널 버전만 맞다면 이건 가능할 거라고 보구요~) 매번 펌웨어를 로드하는 것은 좀 비효율이라고 생각되지만요, 물론 펌웨어 버전 체크를 할 것 같긴하지만요~

앗, 그리고 디바이스드라이버 모듈ko 같은 것들도
AUR에서 받으면,
이것들은 커널 부팅 후 별도로 insmod 또는 modprobe 해줘야 할거로 보이는데요~(물론 스크립트로 가능하게 하면 되겠지만요~)

결론은 본문에서 언급하신 예는, 이런 메카니즘이 우분투에 어떻게 적용되는지 해당 path를 파악하시고 바로 그 위치로

펌웨어 naming도 변경하시고 copy해서 했다는 결론인 것 같네요~ <=