관련자료

Vanilla 커널사용 시 필요한 패치(5.11, 5.12버전 기준)

  • 재부팅 문제 수정 (참고 소스)
    drivers/gpu/drm/meson/meson-drv.c 파일의 platform_driver 구조체 변수 선언에서 shutdown 함수 할당 주석 또는 제거
static struct platform_driver meson_drm_platform_driver = {
	.probe      = meson_drv_probe,
/*	.shutdown   = meson_drv_shutdown, */
	.driver     = {
		.name	= "meson-drm",
		.of_match_table = dt_match,
		.pm = &meson_drv_pm_ops,
	},
};
  • Makefile 적용
...
obj-$(CONFIG_PWM_EP93XX)	+= pwm-ep93xx.o
obj-$(CONFIG_PWM_FSL_FTM)	+= pwm-fsl-ftm.o
obj-$(CONFIG_PWM_GPIO)		+= pwm-gpio.o
obj-$(CONFIG_PWM_HIBVT)		+= pwm-hibvt.o
obj-$(CONFIG_PWM_IMG)		+= pwm-img.o
...
  • Kconfig 적용
...
	  To compile this driver as a module, choose M here: the module
	  will be called pwm-fsl-ftm.

config PWM_GPIO
	tristate "Generic GPIO bit-banged PWM driver"
	depends on OF
	depends on GPIOLIB
	help
	  Some platforms do not offer any hardware PWM capabilities but do have
	  General Purpose Input Output (GPIO) pins available. Using the kernels
	  High-Resolution Timer API this driver tries to toggle GPIO using the
	  generic kernel PWM framework. The maximum frequency and/or accuracy
	  is dependent on several factors such as system load and the maximum
	  speed a pin can be toggled at the hardware.

	  To compile this driver as a module, choose M here: the module
	  will be called pwm-gpio.

config PWM_HIBVT
	tristate "HiSilicon BVT PWM support"
	depends on ARCH_HISI || COMPILE_TEST
	depends on HAS_IOMEM
...
  • Device Tree 적용
    arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2.dtsi 파일에 아래 내용 추가
...
#include <dt-bindings/sound/meson-g12a-toacodec.h>
#include <dt-bindings/sound/meson-g12a-tohdmitx.h>
#include <dt-bindings/pwm/pwm.h>
...

/ {
...
	pwmgpio:pwmgpio {
		compatible = "pwm-gpio";
		#pwm-cells = <3>;
		pwm-gpios = <&gpio_ao GPIOAO_10 GPIO_ACTIVE_HIGH>;
		status = "okay";
	};

	pwmfan:pwm-fan {
		compatible = "pwm-fan";
		pwms = <&pwmgpio 0 40000 PWM_POLARITY_INVERTED>;
		cooling-min-state = <0>;
		cooling-max-state = <3>;
		#cooling-cells = <2>;
		cooling-levels = <0 120 170 220>;
	};
};

&cpu_thermal {
	trips {
		fan_0: trip-point@4 {
			temperature = <45000>;
			hysteresis = <5000>;
			type = "active";
		};
		fan_1: trip-point@5 {
			temperature = <65000>;
			hysteresis = <5000>;
			type = "active";
		};
		fan_2: trip-point@6 {
			temperature = <75000>;
			hysteresis = <5000>;
			type = "active";
		};
	};
	cooling-maps {
		fan_cooling_map0 {
			trip = <&fan_0>;
			cooling-device = <&pwmfan 0 1>;
		};
		fan_cooling_map1 {
			trip = <&fan_1>;
			cooling-device = <&pwmfan 1 2>;
		};
		fan_cooling_map2 {
			trip = <&fan_2>;
			cooling-device = <&pwmfan 2 3>;
		};
	};
};
  • Makefile 적용
...
obj-$(CONFIG_XILLYBUS)		+= xillybus/
obj-$(CONFIG_POWERNV_OP_PANEL)	+= powernv-op-panel.o
obj-$(CONFIG_ADI)		+= adi.o

obj-$(CONFIG_AMLOGIC_GPIOMEM)	+= aml-gpiomem.o
  • Kconfig 적용
...
	  and SSM (Silicon Secured Memory).  Intended consumers of this
	  driver include crash and makedumpfile.

config AMLOGIC_GPIOMEM
	tristate "/dev/gpiomem rootless GPIO access via mmap() on the Amlogic"
	default m
	help
	  Provides users with root-free access to the GPIO registers
	  on Meson g12 platform. Calling mmap(/dev/gpiomem) will map the GPIO
	  register page to the user's pointer. This drvier can allow to access
	  gpio memory area in user account.

endmenu
...
  • Device Tree 적용
    arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2.dtsi 파일에 아래 내용 추가
    (compatible 문자열에 공백을 제거하고싶다면 pwm-gpio.c의 compatible 정의도 마찬가지로 공백을 제거해야 함)
/ {
...
	gpiomem {
		compatible = "amlogic, gpiomem";
		reg = <0x0 0xff634000 0x0 0x1000>;
		status = "okay";
	};
};
  • I2C-0 활성
  • Device Tree 적용
    arch/arm64/boot/amlogic/meson-g12b-odroid-n2.dtsi 파일에 아래 내용 추가
    pinctrl 이름은 drivers/pinctrl/meson/pinctrl-meson-g12a.c 파일에서 참조
    GPIO PINMAP은 하드커널 위키에서 참조
/ {
...
};

&i2c3 {
	status = "okay";
	pinctrl-0 = <&i2c2_sda_x_pins>, <&i2c2_sck_x_pins>;
	pinctrl-names = "default";
};

...
  • I2C-1 활성
  • Device Tree 적용
    arch/arm64/boot/amlogic/meson-g12b-odroid-n2.dtsi 파일에 아래 내용 추가
/ {
...
};

&i2c3 {
	status = "okay";
	pinctrl-0 = <&i2c3_sda_a_pins>, <&i2c3_sck_a_pins>;
	pinctrl-names = "default";
};

...

해결이 필요한 문제

  • Prebuild OS (Ubuntu 10.04)
    • PWM-FAN이 45도 이상 온도에서도 동작하지 않음
    • btrfs를 사용할 수 없음 (마운트하면 커널 패닉)
  • Vanilla Kernel
    • sysfs GPIO(/sys/class/gpio)가 동작하지 않음 (대신 hardkernel 커널에 포팅 된 gpiomem을 사용)
    • GPU 하드웨어 가속 드라이버(panfrost)가 X11에서 영상 디코딩 레이어, 마우스 포인터 렌더링에 문제가 있음
    • 높은 프로세서 사용 중 IO가 많이 일어나면 btrfs 스택에서 커널 패닉이 일어나는 일이 많음 (zfs를 사용해도 문제가 발생)

기타

  • sdcard로 이미지 쓰기 시 progress 정상표시 (olfsg=dsync)
    dd if=sdcard.img of=/dev/sdX bs=1M oflag=dsync status=progress