2022-08-19

[개발노트]USB OTG ID 핀 상태 읽기 (0번비트임)

#include <stdio.h>
#include <sys/mman.h>
#include <fcntl.h>

int main(void)
{
        int fd = open("/dev/mem", O_RDWR);
        void* ptr = mmap(NULL, 4096, PROT_READ,
                 MAP_SHARED, fd, 0x49000000);
        close(fd);

        if(ptr == MAP_FAILED)
        {
                printf("mmap failed\n");
                return -1;
        }
        volatile unsigned* GINTSTS = (unsigned*)(ptr + 0x14);

        printf("%08X \n",*GINTSTS);

        munmap(ptr, 4096);

        return 0;
}

2022-08-15

[개발환경] WSL2 gui 환경설정과 접속.

sudo apt install -y xrdp
sudo apt install -y xfce4
gdm3선택
sudo apt install -y xfce4-goodies

sudo cp /etc/xrdp/xrdp.ini /etc/xrdp/xrdp.ini.bak

sudo sed -i 's/3389/3390/g' /etc/xrdp/xrdp.ini
sudo sed -i 's/max_bpp=32/#max_bpp=32\nmax_bpp=128/g' /etc/xrdp/xrdp.ini
sudo sed -i 's/xserverbpp=24/#xserverbpp=24\nxserverbpp=128/g' /etc/xrdp/xrdp.ini
echo xfce4-session > ~/.xsession
sudo vi /etc/xrdp/startwm.sh
#test -x /etc/X11/Xsession && exec /etc/X11/Xsession
#exec /bin/sh /etc/X11/Xsession
#xfce
startxfce4

윈도우 원격데스크탑.
localhost:3390

인터넷브라우져가 없으므로
sudo apt install firefox


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 하여 연결고리 끊고 (압축파일풀어서 모두 다시 소스준비하도록)

확인은 알아서.



2022-08-03

[개발노트] gpio 핀맵 옵셋 해석문제 트릭해결


sdk에 아래와같이 pinctrl 과 시작번호와 갯수로 구성되는데 저걸 해석을 잘 못함.
    gpiof: gpio@50007000 {
        status = "okay";
        ngpios = <6>;
        gpio-ranges = <&pinctrl 6 86 6>;
    };

    gpiog: gpio@50008000 {
        status = "okay";
        ngpios = <10>;
        gpio-ranges = <&pinctrl 6 102 10>;
    };

sdk소스 건드리는건 반칙이므로, 오버레이로 햇깔리지않게 변경.
&gpiof {
    status = "okay";
    ngpios = <12>;
    gpio-ranges = <&pinctrl 0 80 12>;
};

&gpiog {
    status = "okay";
    ngpios = <16>;
    gpio-ranges = <&pinctrl 0 96 16>;
};

pwm 응용 참고

2022-08-02

[개발노트] stm32mp1 kernel fragment 적용.

1. devtool modify linux-stm32mp 로 workspace/source/linux-stm32mp 로 소스 빼냄.
2. devtool menuconfig linux-stm32mp 하여 기본에서 수정하고 싶은것 수정.
--> .../workspace/sources/linux-stm32mp/oe-local-files/devtool-fragment.cfg 에 생성됨.
4. 별도로 만드는 레시피가 복잡하므로, 이미 만들어져있는 커널레시피에 추가함.
이미 만들어져있는레시피
layers/meta-st/meta-st-stm32mp/recipes-kernel/linux/linux-stm32mp/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"

fragment-99-ssonic.config 파일은
layers/meta-st/meta-st-stm32mp/recipes-kernel/linux/linux-stm32mp/5.10/ 에 넣는다 
(다른것들도 여기있음)

devtool reset linux-stm32mp 하면 devtool과의 연결고리가 끊어지고, 수동으로 폴더를 지워야함.
이후 다시 devtool modify linux-stm32mp 하면 새로 원본소스부터 fragment까지 다 적용한것을 workspace/source/linux-stm32mp에 만들어주는데, 이후 devtool menuconfig linux-stm32mp 하면
해당폴더에, .config.baseline 과 .config.new 가 생김.
menuconfig을 할경우 .config.new가 수정됨. 






2022-07-28

[개발노트] yocto에 my-app 넣기.

사전준비

my custom recipe를 만드는법은 많이 나와있으므로, 생성시킴.

bitbake-layers show-layers
bitbake-layers create-layer --priority 7 ../layers/meta-st/meta-ssonic
bitbake-layers add-layer ../layers/meta-st/meta-ssonic


# We have a conf and classes directory, add to BBPATH
BBPATH .= ":${LAYERDIR}"

# We have recipes-* directories, add to BBFILES
BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
            ${LAYERDIR}/recipes-*/*/*.bbappend"

BBFILE_COLLECTIONS += "meta-ssonic"
BBFILE_PATTERN_meta-ssonic = "^${LAYERDIR}/"
BBFILE_PRIORITY_meta-ssonic = "7"

LAYERDEPENDS_meta-ssonic = "core"
LAYERSERIES_COMPAT_meta-ssonic = "dunfell"


recipes-*/*/*.bb 와 bbappend를 찾는구조임.

recipes-이름/이름/이름.bb 로 만들면됨.

ex) app이라면, 
recipes-app/app/app.bb 로 그냥 만들면됨

recipes-app/app/files 디렉토리를 만들고 그 안에 소스를 넣는다.

app.bb는 자동생성된것을 수정하여 사용한다.

내용은
SUMMARY = "bitbake-layers recipe"
DESCRIPTION = "Recipe created by bitbake-layers"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"

python do_display_banner() {
    bb.plain("***********************************************");
    bb.plain("*                                             *");
    bb.plain("*  Example recipe created by bitbake-layers   *");
    bb.plain("*                                             *");
    bb.plain("***********************************************");
}

addtask display_banner before do_build

SRC_URI = "file://*"

S = "${WORKDIR}"
P = "r01"

inherit cmake

cmake로 된 프로젝트일때 SRC_URI = "file://*"

CMakeLists.txt
cmake_minimum_required(VERSION 3.0.0)

project(hong)

#set (CMAKE_NO_SYSTEM_FROM_IMPORTED ON)
INCLUDE_DIRECTORIES( .)

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -lrt -lpthread -ldl -std=gnu99")

add_executable(main main.c)

install (TARGETS main DESTINATION bin)

install은 main이라는 프로그램이 /usr/bin에 들어간다.

끝.


2022-07-26

[개발노트] stm32mp1 kirk 4.0 stm32mp153에서 cpufreq-dt 오류.

커널소스에 두줄 추가.
    { .compatible = "st,stih418", },
    { .compatible = "st,stm32mp151", }, //추가.
    { .compatible = "st,stm32mp153", }, //추가.
    { .compatible = "st,stm32mp157", },
   
    { .compatible = "ti,am33xx", },

[개발노트] sc16is720 켜기

Device Drivers  ---> 
Character devices  ---> 
Serial drivers  ---> 
<*> SC16IS7xx serial support
 [*]   SC16IS7xx for spi interface

2022-07-25

[개발노트] stm32mp1 PWM 켜기

Multifunction device drivers  --->
{*} Support for STM32 Timers

[*] Pulse-Width Modulation (PWM) Support  --->
 <*>   STMicroelectronics STM32 PWM

[개발노트] DSA켜기 커널옵션

순서대로....
[*] Networking support  --->
Networking options  --->
<*>   The IPv6 protocol  --->
 <*> 802.1d Ethernet Bridging
<*> High-availability Seamless Redundancy (HSR & PRP)
<*> Distributed Switch Architecture  ---> 
-*-   Tag driver for SMSC/Microchip LAN9303 family of switches
 
Device Drivers  --->
[*] Network device support  --->
 Distributed Switch Architecture drivers  --->
<*> SMSC/Microchip LAN9303 3-ports 10/100 ethernet switch in MDIO managed mode

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

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