2022-08-04

[개발노트] 커널패치 만들어서 배포판에 넣어보기.

devtool modify linux-stm32mp 로 workspace에 소스빼기.
이때 생성된 커널소스는 모든 fragmemt와 patch가 적용된 최종 원본이다.
이 원본을 손대어 수정할 것이다.

일단 원본커널dir의 이름을 a로 바꾼다.
cp linux-stm32mp a

원본소스를 b로 바꾼후. 그안의 소스수정하자.
mv linux-stm32mp b

b/drivers/gpio/gpio-74x164.c 를 열어서 수정함.
174라인쯤에 
of_property_read_u8_array(spi->dev.of_node, "registers-default",
                    chip->buffer, chip->registers);
추가함.
u-boot의 74x164소스는 디바이스트리의 기본값(registers-default)를 읽어서 초기값으로 사용하는데. 이후 커널의 74x164소스는 그게 없음, 그래서 초기값이 0으로 들어감.
u-boot에서 kernel 부팅시 버퍼변수가 적용되어 led들이 모두 켜짐. 다른제어핀도 있는데 초기값 유지가 안되는 문제로 확대걱정임. 그래서 위와같은 로직추가함.

diff -urN a/drivers/ b/drivers/ > 0099-ARM-5.10.61-stm32mp1-r2-74x164INITVALUE.patch
대충 이런내용.
diff -urN a/drivers/gpio/gpio-74x164.c b/drivers/gpio/gpio-74x164.c
--- a/drivers/gpio/gpio-74x164.c    2021-08-26 21:51:21.000000000 +0900
+++ b/drivers/gpio/gpio-74x164.c    2022-08-04 12:59:51.665613200 +0900
@@ -144,7 +144,8 @@
    chip->gpio_chip.can_sleep = true;
    chip->gpio_chip.parent = &spi->dev;
    chip->gpio_chip.owner = THIS_MODULE;
-
+   of_property_read_u8_array(spi->dev.of_node, "registers-default",
+                   chip->buffer, chip->registers);
    mutex_init(&chip->lock);
 
    ret = __gen_74x164_write_config(chip);
이걸 패치들 모여있는곳에 추가하자.

위치는 
layers/meta-st/meta-st-stm32mp/recipes-kernel/linux/linux-stm32mp/5.10/5.10.61/

layers/meta-st/meta-st-stm32mp/recipes-kernel/linux/linux-stm32mp_5.10.bb 맨 밑에 파일추가
#c.h.jung added
KERNEL_CONFIG_FRAGMENTS += "${WORKDIR}/fragments/${LINUX_VERSION}/fragment-99-ssonic.config"
SRC_URI += "file://${LINUX_VERSION}/fragment-99-ssonic.config;subdir=fragments"
SRC_URI_class-devupstream += "file://${LINUX_VERSION}/fragment-99-ssonic.config;subdir=fragments"
#kernel patch
SRC_URI += " file://${LINUX_VERSION}/${LINUX_VERSION}.${LINUX_SUBVERSION}/0099-ARM-5.10.61-stm32mp1-r2-74x164INITVALUE.patch "

(기존에 fragment 추가한게 보이네? 그밑에 추가)

이제 빌드.
devtool reset linux-stm32mp 하여 연결고리 끊고 (압축파일풀어서 모두 다시 소스준비하도록)

확인은 알아서.



댓글 1개:

암호화 + base64 하고 쉘스크립트.

 #!/bin/bash # IV와 UserKey를 설정합니다 (아스키 문자열을 그대로 사용). IV="0123456789abcdef"  UserKey="0123456789abcdef" # IV와 UserKey를 16...