Linux 커널 구조 및 설정 경로
TinaSDK의 기반인 Linux 커널은 특정 하드웨어 플랫폼에 맞춰 구성됩니다. 주요 파일 위치는 다음과 같습니다:
-
기판별 커널 설정 파일:
device/config/chips/t113/configs/100ask/linux/config-5.4 -
기판용 장치 트리(디바이스 트리) 파일:
device/config/chips/t113/configs/100ask/board.dts -
상위 장치 트리 파일:
sun8iw20p1.dtsi(해당 파일은 실제 장치 트리의 기본 정의를 포함)
각 경로는 터미널에서 cconfigs 명령어로 빠르게 이동할 수 있으며, 커널 소스 코드는 lichee/linux-5.4 폴더에 위치합니다. 해당 디렉터리로 접근하려면 ckernel 명령어를 사용하세요.
또한, 장치 트리 관련 파일들은 lichee/linux-5.4/arch/arm/boot/dts/ 경로에 있으며, cdts 명령어로 바로 진입 가능합니다.
환경 변수 설정 파일은:
device/config/chips/t113/configs/100ask/env.cfg
장치 트리 패키징 정보는 boot_package.cfg 파일에 정의되어 있으며, U-Boot 환경에서 동적으로 장치 트리 내용을 변경하고 검사할 수 있도록 지원합니다. 예를 들어, 활성화된 FDT(Firmware Device Tree)를 전환하기 위해 set_working_fdt 명령어를 사용할 수 있습니다:
=> set_working_fdt 0x7bebee58
change working_fdt 0x7be8ee58 to 0x7bebee58
이 명령어는 부팅 시점에 적용되는 장치 트리 설정을 조정하는 데 유용합니다.
커널 단독 컴파일 방법
TinaSDK 환경에서 커널만 별도로 빌드하려면, 프로젝트 루트 디렉터리에서 다음 명령어를 실행합니다:
mkernel
이전 세션에서 환경 설정이 해제되었거나, 호스트 시스템이 재시작된 경우, 먼저 아래 명령어를 실행하여 환경을 초기화해야 합니다:
source build/envsetup.sh
lunch
선택 항목 중 4. t113_100ask-tina를 입력하여 타겟을 지정합니다. 이후 mkernel 명령어로 커널 빌드가 시작되며, 변경 사항이 없으면 캐시된 결과를 재사용하여 빌드 속도를 최적화합니다.
Kconfig 기반 커널 설정
커널 옵션을 직접 수정하려면 다음 명령어로 메뉴 기반 설정 인터페이스를 열 수 있습니다:
make kernel_menuconfig
이 도구를 통해 Device Drivers, Input device support, Sensors 등 계층 구조 내에서 원하는 모듈을 선택하거나 비활성화할 수 있습니다. 예를 들어, sunxi gpadc driver support를 활성화하려면 해당 항목 앞에 <*> 표시를 추가하면 됩니다.
⚠️ 참고:
make kernel_menuconfig로 설정한 옵션은make clean또는make distclean후에는 사라지므로, 영구 저장이 필요하다면make menuconfig를 통해 전체 시스템 구성에서 관리해야 합니다.
새로운 커널 모듈 추가: 터치스크린 드라이버 (GT911)
7인치 1024×600 해상도의 전자식 터치스크린을 추가하려면, 먼저 회로도를 분석하여 핀 연결을 확인합니다:
| 회로도 핀 | T113s3 핀 이름 |
|---|---|
| CTP_INT | PE1 |
| CTP_RST | PE0 |
| I2C_SCL | PE12 |
| I2C_SDA | PE13 |
PE12와 PE13은 TWI2 모드로 설정되어야 하며, 장치 트리(board.dts)에 다음과 같이 구성합니다:
&pio {
twi2_pins_a: twi2@0 {
pins = "PE12", "PE13";
function = "twi2";
drive-strength = <10>;
};
twi2_pins_b: twi2@1 {
pins = "PE12", "PE13";
function = "gpio_in";
};
};
&twi2 {
clock-frequency = <400000>;
pinctrl-0 = <&twi2_pins_a>;
pinctrl-1 = <&twi2_pins_b>;
pinctrl-names = "default", "sleep";
status = "okay";
ctp@14 {
compatible = "allwinner,goodix";
device_type = "ctp";
reg = <0x14>;
ctp_name = "gt9xxnew_ts";
ctp_twi_id = <0x2>;
ctp_twi_addr = <0x14>;
ctp_screen_max_x = <0x400>;
ctp_screen_max_y = <0x258>;
ctp_revert_x_flag = <0x0>;
ctp_revert_y_flag = <0x0>;
ctp_exchange_x_y_flag = <0x0>;
ctp_int_port = <&pio PE 1 GPIO_ACTIVE_HIGH>;
ctp_wakeup = <&pio PE 0 GPIO_ACTIVE_HIGH>;
};
};
장치 트리는 TinaSDK에서 자동으로 컴파일되며, 별도의 dtb 파일만 빌드할 수 없습니다. 전체 시스템을 다시 pack 명령어로 패키징해야 합니다.
GPADC 버튼 드라이버 추가
개발보드의 K1~K4 버튼은 GPADC(일반형 아날로그-디지털 변환기)를 통해 감지됩니다. 각 버튼은 서로 다른 저항값을 통해 전압을 생성하며, 이를 통해 누른 버튼을 식별합니다.
- 전원 공급: 1.8V (AVCC)
- 해상도: 12비트
- 최대 샘플링 속도: 1MHz
장치 트리 설정은 두 부분으로 나뉩니다:
- 기본 설정 (
sun8iw20p1.dtsi):
gpadc: gpadc@2009000 {
compatible = "allwinner,sunxi-gpadc";
reg = <0x0 0x02009000 0x0 0x400>;
interrupts = <GIC_SPI 57 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&ccu CLK_BUS_GPADC>;
clock-names = "bus";
resets = <&ccu RST_BUS_GPADC>;
status = "okay";
};
- 채널 및 키 값 설정 (
board.dts):
&gpadc {
channel_num = <1>;
channel_select = <0x1>;
channel_data_select = <0>;
channel_compare_select = <0x1>;
channel_cld_select = <0x1>;
channel_chd_select = <0>;
channel0_compare_lowdata = <1700000>;
channel0_compare_higdata = <1200000>;
channel1_compare_lowdata = <460000>;
channel1_compare_higdata = <1200000>;
key_cnt = <5>;
key0_vol = <210>; key0_val = <115>;
key1_vol = <410>; key1_val = <114>;
key2_vol = <590>; key2_val = <119>;
key3_vol = <750>; key3_val = <373>;
key4_vol = <880>; key4_val = <28>;
status = "okay";
};
커널 드라이버는 make kernel_menuconfig에서 Input device support → Sensors → sunxi gpadc driver support를 선택하여 활성화합니다.
테스트 및 배포 절차
빌드 완료 후, 다음 명령어로 시스템 이미지를 패키징합니다:
pack
완료 시 pack finish 메시지와 함께 출력된 이미지 파일 경로를 확인하세요. 이를 통해 ssh, VMware 드래그앤드롭 등을 이용해 외부로 복사할 수 있습니다.
이미지를 개발보드에 로드하려면, PhoenixSuit 또는 PhoenixCard-V2.8 도구를 사용하여 SPI NAND나 TF 카드에 직접 업로드합니다. 실험 목적이라면 선형 스크립트 방식의 라이트닝 업데이트가 권장됩니다.
검증 방법
-
터치스크린 검증: 시스템 부팅 후
cat /proc/bus/input/devices명령어로 모든 입력 장치 목록을 확인하고,gt9xxnew_ts가 포함되어 있는지 확인합니다. 해당 장치의 매핑된event노드(예:event2)를 사용해cat /dev/input/event2로 터치 입력을 실시간으로 확인할 수 있습니다. -
버튼 입력 검증:
getevent도구를 설치 후 실행하면, 각 버튼에 대한 키코드 값이 출력됩니다. 예:KEY_ENTER,KEY_MENU등.