임베디드 리눅스 개발 중 무선랜 모듈 인식 문제가 자주 골칫거리인데요, 이번에는 PICO-PI-IMX7 보드에서 Broadcom AP6212 (BCM43438) 칩셋 기반 무선랜을 사용하기 위해 고군분투한 과정을 공유해보려고 합니다.


🔍 문제 상황: wlan interface 미인식

먼저, ifconfig 또는 iwconfig 명령어로 네트워크 인터페이스를 확인했을 때 wlan0 인터페이스가 나타나지 않았습니다.

관련 이슈:


🛠️ 드라이버 및 펌웨어 설치 과정

1. 필수 패키지 설치

sudo apt update sudo apt install git wget unzip build-essential
 
 

2. 펌웨어 디렉토리 생성 및 이동

sudo mkdir -p /lib/firmware/brcm cd /lib/firmware/brcm

3. AP6212 (BCM43438) 펌웨어 다운로드

wget https://raw.githubusercontent.com/armbian/firmware/refs/heads/master/brcm/brcmfmac43430-sdio.bin
wget https://raw.githubusercontent.com/armbian/firmware/refs/heads/master/brcm/brcmfmac43430-sdio.txt
 

💡 Tip: 간혹 위 URL에서 파일이 삭제된 경우가 있으니, 다른 저장소를 찾아보거나 로컬에서 보드로 복사(scp)하는 방법을 활용하세요.

4. 파일 이동 및 이름 변경

sudo mv brcmfmac43430-sdio.bin /lib/firmware/brcm
sudo mv brcmfmac43430-sdio.txt /lib/firmware/brcm

cd /lib/firmware/brcm
mv brcmfmac43430-sdio.txt brcmfmac43430-sdio.pico-pi-imx7.txt
 
5. 드라이버 수동 로딩
# 여기서 실패
sudo modprobe -r brcmfmac
sudo modprobe brcmfmac

6. 불필요한 패키지 정리 및 펌웨어 재설치

# 필요 없는 거 삭제
sudo apt autoremove

# 여기서 실패
sudo apt install linux-firmware

🚨 문제점: 설치 중 용량 부족

설치 도중 linux-firmware 패키지가 시스템 용량 부족으로 설치되지 않는 문제가 있었습니다.
👉 이 경우, /var/cache/apt/archives 정리나 불필요한 패키지 삭제로 여유 공간을 확보하세요.

sudo apt clean
sudo apt autoremove

 


✅ 결론

드라이버 설치와 펌웨어 세팅을 마친 후 재부팅하고 나면, wlan0 인터페이스가 정상적으로 보드에 인식될지 모르겟으나 저는 일단 용량이 부족해서 실패 했습니다.

성공 했다면 이후 wpa_supplicant 또는 nmcli를 활용해 네트워크에 연결할 수 있습니다.


📌 마무리

임베디드 보드에서 Wi-Fi 연동은 항상 쉽지 않지만, 드라이버와 펌웨어의 존재 유무가 핵심입니다. 위 과정이 여러분의 PICO-PI-IMX7 보드 Wi-Fi 연결 문제 해결에 도움이 되길 바랍니다!

TechNexion의 PICO-IMX7은 ARM Cortex-A7 기반 SoM(System on Module)으로, IoT와 엣지 디바이스 개발에 적합한 플랫폼입니다. 이 포스트에서는 Pico Pro Maker Kit을 활용해 Ubuntu 22.04 이미지를 성공적으로 플래싱하고 부팅하는 과정을 다룹니다.


📦 PICO-IMX7 평가 키트 언박싱

PICO-PI-IMX7 Evaluation Kit에는 다음과 같은 구성품이 포함되어 있습니다:

  • PICO-IMX7 SoM (System on Module)
  • 베이스 보드
  • USB-C 케이블 (전원용)
  • 5핀 마이크로 USB 케이블 (데이터 전송용)

🎥 언박싱 영상 보기


⚙️ 부트 모드 설정

부팅 모드는 DIP 스위치를 통해 설정할 수 있으며, 관련 가이드는 아래 링크에서 확인할 수 있습니다:

🔧 Boot Mode 설정 문서


🛠️ 필요한 도구 및 이미지 다운로드

이미지 플래싱을 위해 다음 파일을 다운로드해야 합니다:

압축 해제 시 포함되는 주요 파일들:

.\imx-img-uuu-tool\multiboar\emmc_imx7_img.auto
.\imx-img-uuu-tool\imx7\pico-imx7\imx7-SPL
.\imx-img-uuu-tool\imx7\pico-imx7\imx7-u-boot.img
.\pico-imx7_pico-pi_ubuntu-22.04_qca9377_lcd-800x480_20240426.wic.bz2 (압축 해제 필요)
 

💻 이미지 플래싱 절차 (Windows 환경)

Windows에서 UUU(Universal Update Utility) 툴을 사용해 이미지를 플래싱합니다:

  1. UUU 설치 및 실행
    다운로드한 imx-mfg-uuu-tool_20210421.zip 압축을 해제합니다.
  2. .wic.bz2 파일 압축 해제
    .wic.bz2 파일을 Bzip2 압축 해제 툴로 풀어줍니다.
  3. 보드 연결
    • USB-C 포트를 통해 전원 공급
    • Micro USB 5핀 포트를 PC에 연결 (데이터 통신용)
  4. UUU 명령 실행
uuu -b emmc_imx7_img.auto imx7-SPL imx7-u-boot.img pico-imx7_pico-pi_ubuntu-22.04_qca9377_lcd-800x480_20240426.wic
 

💡 참고: 이 과정을 GUI로 보고 싶은 경우, 관련 영상을 참고하세요.


🔐 부팅 후 로그인

부팅 후 UART 또는 네트워크를 통해 접속하면 기본 계정 정보는 다음과 같습니다:

  • ID: ubuntu
  • PW: ubuntu

📚 참고 자료


✨ 마무리

이 과정을 통해 TechNexion PICO-IMX7 보드에 Ubuntu 22.04를 성공적으로 설치하고 부팅할 수 있습니다.

✅ USB 부팅 방법

  1. 부팅 가능한 USB 장치 준비
    • Windows 설치 USB나 부팅 가능한 리눅스 USB 등.
    • FAT32 포맷으로 포맷된 USB를 사용하는 것이 호환성에 좋습니다.
  2. 서피스 프로 2 전원 끄기
    • 완전히 종료된 상태여야 합니다.
  3. USB를 서피스에 연결
  4. [볼륨 작게 버튼] + [전원 버튼] 동시에 누르기
    • 왼쪽 측면의 [볼륨 작게] 버튼(Volume Down) 을 누른 상태로 유지하면서
      상단의 [전원 버튼]을 짧게 눌러줍니다.
  5. USB로 부팅됨
    • 제대로 된 USB가 연결되어 있다면, USB에서 자동으로 부팅됩니다.

✅ BIOS (UEFI) 설정 진입 방법

  1. 서피스 프로 2 전원 끄기
  2. [볼륨 크게 버튼] + [전원 버튼] 동시에 누르기
    • 이번에는 [볼륨 크게] 버튼(Volume Up) 을 누른 상태에서
      전원 버튼을 짧게 누르고 손을 떼세요.
  3. UEFI 메뉴 진입
    • 몇 초 후 UEFI (BIOS와 같은 역할을 하는 펌웨어 설정 화면)가 나타납니다.

🔧 UEFI에서 USB 부팅 순서 설정

  1. Devices > Boot Configuration 메뉴에서
  2. USB Storage 부팅 순서를 최상단으로 이동시키면
  3. 항상 USB 우선 부팅이 됩니다.

https://support.microsoft.com/ko-kr/surface/surface%EB%A5%BC-usb-%EC%9E%A5%EC%B9%98%EC%97%90%EC%84%9C-%EB%B6%80%ED%8C%85-fe7a7323-8d1d-823d-be17-9aec89c4f9f5#windowsversion=windows_10

 

Surface를 USB 장치에서 부팅 - Microsoft 지원

관련 주제 Applies ToSurface Windows 11Windows 10 펌웨어 설정 또는 Windows 시작 설정을 변경하려는 경우, USB 드라이브에서 Surface를 시작하면 도움이 될 수 있습니다. USB 장치에서 부팅해도 Surface가 복구되

support.microsoft.com

 

https://support.microsoft.com/ko-kr/surface/surface-pro-3-%EC%9D%B4%EC%A0%84-%EB%94%94%EB%B0%94%EC%9D%B4%EC%8A%A4%EC%97%90%EC%84%9C-bios-uefi%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-%EC%96%B4%EB%96%BB%EA%B2%8C-%ED%95%A0%EA%B9%8C%EC%9A%94-0f5953d2-befa-3617-a0e5-9735945af774

 

Surface Pro 3 이전 디바이스에서 BIOS/UEFI를 사용하는 어떻게 할까요? - Microsoft 지원

Applies ToSurface Pro (1st Gen) Surface Pro 2 Surface Pro 3 Surface 3 Windows 10 대한 지원은 2025년 10월에 종료됩니다. 2025년 10월 14일 이후에 Microsoft는 더 이상 Windows 업데이트, 기술 지원 또는 Windows 10 대한 보안

support.microsoft.com

 

'잡동사니' 카테고리의 다른 글

라이브러리 vs 프레임워크  (1) 2024.12.28
Pico Pro Maker Kit  (0) 2024.12.28
통합 AI 클라이언트 AI 프롬프트 관리  (0) 2024.10.29
구글 독스 마크다운  (0) 2024.08.17
DisableMonitor 업데이트, 맥북 화면 끄기  (0) 2024.08.07

1. 줄바꿈(Line Ending) 문제 이해

  • Windows: CRLF (\r\n)
  • macOS (및 Unix/Linux): LF (\n)

윈도우와 맥에서 동일한 프로젝트를 개발할 때, 서로 다른 줄바꿈 문자 때문에 Git에서 불필요한 변경이 발생하거나, 특정 파일이 깨질 수 있습니다.


2. Git에서 줄바꿈 통일하기

(1) .gitattributes 파일 설정

저장소 루트에 .gitattributes 파일을 만들고 다음 내용을 추가하세요:

# 텍스트 파일의 줄바꿈을 LF로 강제
* text=auto eol=lf
 

이 설정을 하면:

  • Git은 체크아웃할 때 OS에 맞는 줄바꿈을 적용
  • 커밋할 때는 자동으로 LF로 변환

만약 줄바꿈을 강제하려면:

* text eol=lf
 

이렇게 하면 모든 텍스트 파일이 강제로 LF로 저장됩니다.


(2) 개별 사용자 Git 설정 변경

각 개발자는 로컬 Git 설정에서 줄바꿈을 자동 변환하도록 설정할 수 있습니다.

윈도우 사용자의 설정

git config --global core.autocrlf true
 
  • 체크아웃 시 CRLF로 변환
  • 커밋할 때는 LF로 변환

맥 사용자의 설정

git config --global core.autocrlf input
 
  • 커밋할 때만 LF 유지 (CRLF로 변경하지 않음)

3. VS Code 설정

VS Code에서는 LF를 강제할 수 있습니다.

  1. 파일 > 기본 설정 > 설정 (Settings)
  2. 검색창에 end of line 입력
  3. "Files: Eol" 옵션을 LF로 변경

또는, settings.json에 다음을 추가:

{
    "files.eol": "\n"
}
 

4. 기존 파일 줄바꿈 변경

이미 CRLF로 저장된 파일을 LF로 일괄 변경하려면:

find . -type f -exec dos2unix {} +
 

또는, VS Code에서 Ctrl + Shift + P → Change End of Line Sequence → LF 선택 후 저장.


이제 윈도우와 맥에서 동일한 줄바꿈을 유지하면서 개발할 수 있습니다! 🚀

라이브러리프레임워크는 소프트웨어 개발에서 자주 사용되는 개념으로, 둘 다 코드 재사용을 통해 개발 속도를 높이고 효율성을 제공하지만, 그 동작 방식과 개발자와의 관계에서 중요한 차이가 있습니다.


라이브러리 (Library)

  • 정의: 특정 기능을 수행하기 위한 코드의 모음.
  • 사용 방식: 개발자가 필요할 때 호출(사용)하는 방식으로 동작합니다.
    • 개발자가 코드 흐름을 제어합니다.
    • 예를 들어, 특정 함수를 호출하거나 객체를 생성하여 사용합니다.
  • 주요 특징:
    • 원하는 기능을 제공하는 도구 역할을 합니다.
    • 개발자가 프로그램의 전체 흐름을 제어하고 라이브러리를 필요할 때만 활용합니다.
  • :
    • Python의 pandas, NumPy, Matplotlib.
    • JavaScript의 Lodash, Moment.js.

라이브러리 사용 예시 (Python - requests 라이브러리):

import requests

response = requests.get('https://api.example.com/data')
print(response.json())

여기서 개발자가 직접 요청을 보내는 방식으로 사용됩니다.


프레임워크 (Framework)

  • 정의: 소프트웨어 개발을 위한 구조와 규칙을 제공하는 플랫폼.
  • 사용 방식: 프레임워크가 프로그램의 흐름을 제어하고, 개발자는 프레임워크의 규칙에 따라 필요한 코드를 작성합니다.
    • "제어의 역전(Inversion of Control, IoC)"이라는 개념에 기반합니다.
    • 프레임워크가 기본적으로 전체 애플리케이션의 흐름을 관리하며, 개발자는 그 안에 필요한 로직을 추가하는 방식입니다.
  • 주요 특징:
    • 특정한 개발 방식과 구조를 강제합니다.
    • 더 큰 범위의 작업(예: 애플리케이션 아키텍처, 데이터베이스 연결, 요청 처리 등)을 처리합니다.
    • 라이브러리를 포함하고 있을 수도 있습니다.
  • :
    • Python의 Django, Flask (웹 개발 프레임워크).
    • JavaScript의 React, Angular, Vue.js (프론트엔드 프레임워크).
    • Java의 Spring.

프레임워크 사용 예시 (Python - Django):

from django.http import HttpResponse

def my_view(request):
    return HttpResponse("Hello, World!")

여기서 프레임워크(Django)는 요청/응답 흐름과 서버 실행을 처리하고, 개발자는 특정 로직을 구현하는 데 집중합니다.


비교 요약

항목 라이브러리 프레임워크

항목 라이브러리 프레임워크
제어권 개발자가 제어권을 가짐 프레임워크가 제어권을 가짐
용도 특정 기능을 제공하는 도구 전체 구조와 애플리케이션 아키텍처 제공
유연성 필요할 때 호출, 자유로운 사용 가능 정해진 규칙과 구조를 따라야 함
예시 NumPy, pandas, requests Django, React, Angular

라이브러리는 단순히 도구 역할을 하고, 프레임워크는 개발의 뼈대를 제공합니다. 필요에 따라 적절히 선택해 사용하는 것이 중요합니다!

+ Recent posts