2022-12-10

2022-12-05

[개발상식] Classless Inter Domain Routing ==> CIDR 표기법


마스크가 포함된 네트워크 표기법?

192.168.0.32/24 인 ip가 속해있는 네트워크는?
192.168.0.0~255까지임.

192.168.0.31/26 인 ip가 속해있는 네트워크는?
1100 0000. 1010 1000.0000 0000.0001 1111
(32-26=)6비트표현가능숫자 ==> 64개, ==> 1~63 range.

https://www.subnet-calculator.com/cidr.php

2022-11-29

disable systemd service in yocto?

in file meta-xxx/recipes-core/systemd/systemd_%.bbappend

do_configure_append() {

  #disabling autostart of systemd-timesyncd      sed -i -e "s/enable systemd-timesyncd.service/disable systemd-timesyncd.service/g" ${S}/presets/90-systemd.preset    #disabling autostart of systemd-resolved      sed -i -e "s/enable systemd-resolved.service/disable systemd-resolved.service/g" ${S}/presets/90-systemd.preset  }

2022-11-16

userspace 에서의 led class 를 이용하는 방법으로, /dev/uleds 열어서 핸들을 얻어온후.
그 핸들을 이용해서 시스템에 등록된 모든 led 기능을 사용한다.
커널 디바이스 드라이버 --> LED --> userspace led 선택.

2022-11-07

리눅스 노트북 빌드가 느릴때 확인사항.

sudo add-apt-repository ppa:linrunner/tlp  sudo apt update
sudo apt install tlp tlp-rdw
sudo apt install acpi-call-dkms
sudo apt install auto-cpufreq

2022-11-04

2022-10-14

[개발노트] sd카드 만들기.

#!/bin/sh
DEVSDCARD=/dev/sdb
DEFAULT_SDCARD_PARTUUID=e91c4e10-16e6-4c0e-bd0e-77becf4a3582
sudo partx -d ${DEVSDCARD}
sudo sgdisk -o ${DEVSDCARD}
sudo sgdisk --resize-table=128 -a 1  \
        -n 1:34:545 -c 1:fsbl1 \
        -n 2:546:1057 -c 2:fsbl2 \
        -n 3:1058:5153 -c 3:fip \
        -n 4:5154:136225 -c 4:bootfs -A 4:set:2 \
        -n 5:136226:2233377 -c 5:rootfs -u 5:${DEFAULT_SDCARD_PARTUUID} \
        -n 6:2233378:4330529 -c 6:userfs \
        -n 7:4330530:8524833 -c 7:raw \
        -p ${DEVSDCARD}
sudo dd if=arm-trusted-firmware/tf-a-stm32mp153d-ssonic-sdcard.stm32 of=${DEVSDCARD}1 conv=fdatasync  bs=8M
sudo dd if=arm-trusted-firmware/tf-a-stm32mp153d-ssonic-sdcard.stm32 of=${DEVSDCARD}2 conv=fdatasync  bs=8M
sudo dd if=fip/fip-stm32mp153d-ssonic-trusted.bin of=${DEVSDCARD}3 conv=fdatasync  bs=8M
sudo dd if=st-image-bootfs-openstlinux-weston-stm32mp153d-ssonic.ext4 of=${DEVSDCARD}4 conv=fdatasync  bs=8M
sudo dd if=st-image-core-openstlinux-weston-stm32mp153d-ssonic.ext4 of=${DEVSDCARD}5 conv=fdatasync  bs=8M
sudo dd if=st-image-userfs-openstlinux-weston-stm32mp153d-ssonic.ext4 of=${DEVSDCARD}6 conv=fdatasync  bs=8M
sudo dd if=/dev/null of=${DEVSDCARD}7 conv=fdatasync  bs=8M count=4

2022-10-02

[개발노트] eeprom에 mac address 넣기 참고용.

^^


 macb1: ethernet@f802c000 {

    compatible = "atmel,sama5d3-macb", "cdns,at91sam9260-macb", "cdns,macb";


    status = "okay";

    phy-mode = "rmii";

    #address-cells = <1>;

    #size-cells = <0>;


    nvmem-cells = <&eth0_addr>;

    nvmem-cell-names = "mac-address";


    phy0: ethernet-phy@1 {

        interrupt-parent = <&pioE>;

        interrupts = <30 IRQ_TYPE_EDGE_FALLING>;

        reg = <1>;

    };


    /*ethernet-phy@1 {

        reg = <0x1>;

    };*/

};


/* Bit banging internal I2C to manage the AT24MAC402 chip */


i2c3@ {

    compatible = "i2c-gpio";

    gpios = <&pioE 1 0 /* SDA */

             &pioE 2 0 /* SCK */

            >;

    i2c-gpio,delay-us = <4>;    /* ~178 kHz */

    #address-cells = <1>;

    #size-cells = <0>;


    /* EEPROM contains the eth0 MAC address */


    eeprom@58 {

        compatible = "atmel,24mac402";

        pagesize = <256>;

        read-only;

        reg = <0x58>;

        #address-cells = <1>;

        #size-cells = <1>;


        eth0_addr: eth-mac-addr@9A {

            reg = <0x0 0x06>;

        };

    };

};

2022-09-19

[삽질메모] nmcli


#ipv6 off
nmcli con modify br0 ipv6.method "disabled"

systemctl stop NetworkManager
systemctl restart NetworkManager


#static ip and bridge mode.
nmcli con add type bridge ifname br0 con-name br0
nmcli con add type bridge-slave ifname lan1 master br0 con-name lan1
nmcli con add type bridge-slave ifname lan2 master br0 con-name lan2

nmcli con modify br0 ipv4.addresses '192.168.222.77/24'
nmcli con modify br0 ipv4.gateway '192.168.222.1'
nmcli con modify br0 ipv4.dns '8.8.8.8 8.8.4.4'
nmcli con modify br0 ipv6.method disabled
nmcli con modify br0 ipv4.method manual
nmcli con modify br0 bridge.stp no
nmcli con up id br0

[   17.156194] br0: port 1(lan1) entered blocking state
[   17.159734] br0: port 1(lan1) entered listening state
[   32.472068] br0: port 1(lan1) entered learning state
[   47.832064] br0: port 1(lan1) entered forwarding state
[   47.835759] br0: topology change detected, propagating
systemd-networkd만 사용할때는 파란부분 blocking->forwarding 으로 빠르게 진행되지만.
NetworkManager만 사용할때는 빨간부분까지 4단계를 거치면서 빨간단계당 5초이상의 시간을 소요한다. 이것은 stp를 끔으로서 해결되었다.(빨간단계를 수행지않고 파란거만 빨리 진행된다는말)
stp : 스페팅트리프로토콜로써 스위치루프를 감지하여 죽이는 알고리즘이란다. 나는필요없...

systemctl daemon-reload
systemctl restart NetworkManager

#delete connection.
nmcli -f bridge con delete br0
nmcli -f bridge-slave con delete lan1
nmcli -f bridge-slave con delete lan2

nmcli -f ethernet con delete lan1


?? default gateway setup.

#gateway mode.
nmcli con add type ethernet ifname lan1 con-name lan1
nmcli con modify lan1 ipv4.addresses '192.168.222.77/24'
nmcli con modify lan1 ipv4.gateway '192.168.222.1'
nmcli con modify lan1 ipv4.dns '8.8.8.8 8.8.4.4'
nmcli con modify lan1 ipv4.method manual && \
nmcli con up id lan1 && \
nmcli con down id lan1 && \
nmcli con up id lan1


# nmcli connection modify bridge0 ipv4.addresses '192.0.2.1/24'
# nmcli connection modify bridge0 ipv4.gateway '192.0.2.254'
# nmcli connection modify bridge0 ipv4.dns '192.0.2.253'
# nmcli connection modify bridge0 ipv4.dns-search 'example.com'
# nmcli connection modify bridge0 ipv4.method manual // auto

nmcli connection modify bridge-br0 ipv4.method manual
nmcli con down id bridge-br0
nmcli con up id bridge-br0

route delete default gw 192.1678.225.1 lte0


nmcli con down id bridge-br0
nmcli con up id bridge-br0
nmcli con mod bridge-br0 ipv4.route-metric 1

nmcli con add con-name lan1 type ethernet ifname lan1 ipv4.method auto
nmcli con up id lan1
nmcli con add con-name lan2 type ethernet ifname lan2 ipv4.method shared
nmcli con up id lan2

nmcli -f ethernet con delete lan1
nmcli -f ethernet con delete lan2

nmcli connection add type ethernet ifname lan2 ipv4.method shared con-name local

nmcli c add con-name lan2 type ethernet ifname lan2 ipv4.method shared ipv6.method ignore
nmcli c up local

esp32-test softap_start_args happycpu p@ss1234 4
nmcli con add type ethernet ifname ethap0 ipv4.method shared con-name ethap0 ipv4.addresses 192.168.100.1/24
nmcli con up id ethap0

ip route add default via 192.168.225.1 dev lte0
ip route replace default via 192.0.2.1 dev eth0

ip route del default via 1.2.3.4 dev eth0 proto static metric 100
ip route add default via 1.2.3.4 dev eth0 proto static metric 90

2022-09-18

[개발노트] overlay.txt란 이런것.

https://developer.toradex.com/linux-bsp/how-to/device-tree/device-tree-overlays-linux/#preenabled-device-tree-overlays 발췌~

Enable/Disable a Device Tree Overlay

To enable or disable applying a pre-built overlay on a Toradex SoM just add/remove it to/from the file overlays.txt located on the boot partition, and reboot the system.


For example, one wants to disable a parallel RGB interface and display on Colibri-iMX8X and enable an HDMI interface (using DSI-to-HDMI adapter). The initial overlays.txt file looks like:


# cat /boot/overlays.txt 

fdt_overlays=colibri-imx8x_parallel-rgb_overlay.dtbo colibri-imx8x_ad7879_overlay.dtbo display-edt7_overlay.dtbo


Steps to disable a parallel RGB and enable an HDMI:


Open the overlays.txt file with any text editor, e.g. vi:

# vi /boot/overlays.txt 


Remove overlays, that is needed for Resistive Touch Display 7" Parallel and add one for DSI-to-HDMI adapter. The file should look like:

# cat /boot/overlays.txt 

fdt_overlays=colibri-imx8x_dsihdmi_overlay.dtbo


Synchronize them filesystems:

# sync


Reboot the system:

# reboot

2022-09-16

[잡시식] 시스템에 할당된(연결된?) 공인아이피 알아내기.

curl ifconfig.me

공유기밑에 사설ip임에도 최상단 공인ip를 알아낼수있다.
--> 이걸로, ISP정보를 알아낼수있을까?
--> 이걸로 ISP DNS서버를 알아내서.
--> 거기에 ping 을 하자. 제일 빠를듯?

2022-09-14

[개발노트][트러블슈팅] git clone이 안될때


갑자기 아래의 오류와 함께 git이 안될때...

Git: Fatal:Unsupported SSL backend 'openssl'. Supported SSL backends: gnutls


wget https://curl.haxx.se/ca/cacert.pem

mv cacert.pem ~/.ssh

git config --global http.sslBackend "openssl"

git config --global http.sslCAInfo ~/.ssh/cacert.pem

git config --global --unset http.sslBackend


2022-09-06

[개발노트][esp32] docker 설치 및 idf docker


[도커기반 개발환경을 위함]
sudo apt  install docker.io

[idf docker 설치]
 현재 위치 폴더를  idf 4.4 컨테이너 내부 /project에 연결
sudo docker run --rm -v $PWD:/project -w /project -it espressif/idf:release-v4.4

# idf.py set-target esp32c3
# cd /project/esp_hosted_mcu/esp/esp_driver/network_adapter
# idf.py build
esptool.py 어쩌고저쩌고 
잘되는가?



2022-09-05

[개발노트]초기설치

우분투20.04.5 기준, stm32mp1 개발에 필요한 기본 설치 (소스 및 배포판 제외)

sudo apt update
sudo apt install -y gawk wget git diffstat unzip texinfo gcc build-essential chrpath socat cpio python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev pylint3 xterm python3-subunit mesa-common-dev zstd liblz4-tool
sudo apt install -y make xsltproc docbook-utils fop dblatex xmlto
sudo apt install -y libmpc-dev libgmp-dev
sudo apt install -y build-essential libncurses-dev libyaml-dev libssl-dev
sudo apt install -y python-is-python3
sudo apt -y install coreutils bsdmainutils sed curl bc lrzsz corkscrew cvs subversion mercurial nfs-common nfs-kernel-server libarchive-zip-perl dos2unix texi2html diffstat libxml2-utils
sudo apt install -y openssh-server gcc-multilib libusb-1.0-0 vim screen
sudo usermod -a -G dialout $USER

mkdir ~/.bin
PATH=~/.bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/.bin/repo
chmod a+x ~/.bin/repo

터미널 열때마다 패쓰적용.
vim ~/.profile
if [ -d "$HOME/.bin" ] ; then
   PATH="$HOME/.bin:$PATH"
fi

어디서든 실행할수있도록.
stm32cubeprogrammer symbolic link 추가.
ln -s <설치된위치>/STM32_Programmer_CLI $HOME/.bin/STM32_Programmer_CLI 

udev rule복사해넣기. usb인식을 위한 규칙.
sudo cp  ~/STMicroelectronics/STM32Cube/STM32CubeProgrammer/Drivers/rules/* /etc/udev/rules.d/




* conf/local.conf 에 OE_TERMINAL = "screen" 추가하면 터미널에서 menuconfig 됨.

2022-09-04

[개발노트] ttyUSB 권한

stm32cubeprogrammer를 실행할때 ttyUSB 포트를 사용못해서 관리자로 실행한적이 있는가??

sudo usermod -a -G dialout $USER

2022-09-01

[개발노트] usb modem의 네트워크이름 바꾸고, DM포트 자동 생성

리눅스 RNDIS 드라이버를 켜면 usb테더링한 스마트폰, usb타입 모뎀 등이 네트워크로 잡힌다.
잡히는 순서에 따라 usb0, usb1 등 또는 usb-gadget 또한 usbX형태로 잡힌다.
그래서, usb net장치 의 제조사번호와 제품번호가 인식되면, udev의 rule에 등록하여
이름을 변경할 수있다. 
또한 DM을위한 시리얼포트 생성하는 실행 스크립트도 추가할수있다.
/etc/udev/rules/XXXXX.rule
SUBSYSTEM=="net", ACTION=="add", ATTRS{idVendor}=="05c6", ATTRS{idProduct}=="902d", NAME="lte0" ,RUN += "/usr/bin/modem_dm.sh"

socat으로 ttyGS0 와 연결하면 됨.

2022-08-23

[개발노트] stm32mp1 Distro recipe usb0 g_ether 설정 막기.

stm32mp1 distro는 이더넷 가젯이 기본으로 설정되어있다.
usb0로 잡히며, 192.168.7.1 로 설정되고, pc측으로 dhcp ip를 준다
이것은 systemd 의 서비스로 설정되어있고,
usb0 이 잡힐때, 스크립트를 실행하여 수행된다.

g_serial을 우리는 사용해야하는데, 위의 g_ether가 설정되면, 
g_serial관련 커널설정을 하더라도, /dev 안에 ttyGS0가 생성되지 않는다.
g_ether를 사용하지않으면 ttyGS0가 생성되더라. (이유는.....???)

또한 g_ether 커널옵션을 다 끄더라도, disto의 recipe는 남아있다.
이것이 뭐가 문제냐면,

usb modem을 host로 붙이는데, g_ether가 없으므로, 이 모뎀이 usb0로 잡히게 된다.
usb0로 잡히므로 위의 systemd에 의해 ip를 192.168.7.1로 설정해버린다.
그리하여 usb0는 모뎀인데, ip설정은 g_ether대로 설정이 되버리는 상황 발생.

그래서 systemd의 서비스까지 없애줘야한다.

통으로 막으면 흔적이 없어지므로 스크립트만 막는다. 위치는.
 Distribution-Package/openstlinux-5.10-dunfell-mp1-21-11-17/layers/meta-st/meta-st-openstlinux/recipes-bsp/tools/usbotg-gadget-config.bb
1. systemd끄고,
SYSTEMD_AUTO_ENABLE_${PN} = "disable"
2. 네트워크 설정 설치 막고.
#install -m 0644 ${WORKDIR}/53-usb-otg.network ${D}${systemd_unitdir}/network
3. 스크립트 설치 막고.
#install -m 0755 ${WORKDIR}/stm32_usbotg_eth_config.sh ${D}${sysconfdir}/init.d/

# Copyright (C) 2018, STMicroelectronics - All Rights Reserved
# Released under the MIT license (see COPYING.MIT for the terms)

DESCRIPTION = "The goal is to enable USB gadget configuration"

LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"

PV = "1.0"

SRC_URI = " file://usbotg-config.service \
    file://stm32_usbotg_eth_config.sh \
    file://53-usb-otg.network \
    "

S = "${WORKDIR}/git"

inherit systemd update-rc.d

SYSTEMD_PACKAGES += "${PN}"
SYSTEMD_SERVICE_${PN} = "usbotg-config.service"
#SYSTEMD_AUTO_ENABLE_${PN} = "enable" c.h.jung
SYSTEMD_AUTO_ENABLE_${PN} = "disable"

do_install() {
    if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then
        install -d ${D}${systemd_unitdir}/system ${D}${base_sbindir} ${D}${systemd_unitdir}/network
        install -m 0644 ${WORKDIR}/usbotg-config.service ${D}${systemd_unitdir}/system
        install -m 0755 ${WORKDIR}/stm32_usbotg_eth_config.sh ${D}${base_sbindir}
        #install -m 0644 ${WORKDIR}/53-usb-otg.network ${D}${systemd_unitdir}/network
    fi

    install -d ${D}${sysconfdir}/init.d
    #install -m 0755 ${WORKDIR}/stm32_usbotg_eth_config.sh ${D}${sysconfdir}/init.d/

}

INITSCRIPT_NAME = "stm32_usbotg_eth_config.sh"
INITSCRIPT_PARAMS = "start 22 5 3 ."

FILES_${PN} += "${systemd_unitdir}/network"

그러면, 모뎀ip잘되고, g_ether막히고. 잘됨.


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

2022-07-19

[개발노트] 루트파일시스템만 빌드할때 이렇게.

bitbake -C rootfs st-image-core (대문자주의)

[개발노트]u-boot env를 linux에서 접근하기.

1. build/conf/local.conf 에 라이브러리 추가한다.
IMAGE_INSTALL_append = " u-boot-fw-utils"

2. 루트파일시스템의 etc에 설정파일 추가.
/etc/fw_env.config
# Device name Device offset Env. size Flash sector size
    1. /dev/mmcblk1p1 -0x2000 0x2000
    2. /dev/mmcblk1p1 -0x4000 0x2000

  1. 3. fw_printenv aaa 333 이렇게 쓴다.

[개발노트] 이렇게 정말해야되냐.

커널을 손본후에 이미지빌드를 하면, 원복된다. 왜그럴까.
아래대로 하면 한번은 유지된다.

bitbake -c menuconfig virtual/kernel
bitbake -c savedefconfig virtual/kernel
cp /home/happycpu/work/Distribution-Package/openstlinux-5.10-dunfell-mp1-21-11-17/build-openstlinuxweston-stm32mp153d-ssonic/tmp-glibc/work/stm32mp153d_ssonic-ostl-linux-gnueabi/linux-stm32mp/5.10.61-stm32mp-r2-r0/build/defconfig ./workspace/sources/linux-stm32mp/arch/arm/configs/multi_v7_defconfig
bitbake st-image-core

[개발노트] stm32mp1 u-boot 74hc595 살리기 config, dts.

devtool modify u-boot-stm32mp 를 통해 workspace에 생성된?(이동된)  u-boot소스의
device tree는 심볼릭 링크이다. layers.......mx/stm32mp15x{보드명}/u-boot 에 실제파일있음.

1. u-boot 의 configs/stm32mp15_trusted_defconfig 파일 에 spi-gpio를 추가해준다.
(Distribution-package에서는 menuconfig 실행이 지원안되어 직접 config파일 편집함)
CONFIG_DM_74X164=y
CONFIG_SOFT_SPI=y

2. device tree 수정.

루트 맨 밑에 (오버레이항목말고) 그냥 추가
soft_spi: soft-spi {
        compatible = "spi-gpio";
        pinctrl-names = "default";
        //pinctrl-0 = <&pinctrl_spi4>;
        //pinctrl-assert-gpios = <&gpio5 8 GPIO_ACTIVE_LOW>;
        status = "okay";
        gpio-sck = <&gpioe 12 0>;
        gpio-mosi = <&gpioe 14 0>;
        cs-gpios = <&gpioe 11 0>;
        num-chipselects = <1>;
        #address-cells = <1>;
        #size-cells = <0>;
        spi-delay-us = <1>;

        gpio_spi: gpio_spi {
            compatible = "fairchild,74hc595";
            reg = <0>;
            gpio-controller;
            #gpio-cells = <2>;
            registers-number = <4>;
            spi-max-frequency = <100000>;
            output-latch-gpio = <&gpioe 11 0>;
            registers-default = /bits/ 8 <0xFF 0xFF 0x00 0x00>;
        };
    };

u-boot빌드는 이전에 올린 글 참조.

2022-07-18

[개발노트] 74hc595의 초기값 제어 안되는 문제해결


u-boot 의 595는 초기 register-default 값이 적용되는데.
kernel의 595는 초기 값이 제어되지 않는현상.

원인.
u-boot에는 register-default 를 읽어서 적용해주는부분이 있고 커널에는 없고.

대책
제어해주면 되지.

방법.(커널소스 디바이스드라이버 수정)
driver->gpio->gpio-74x164.c 아래 중간부분 추가.
    chip->gpio_chip.ngpio = GEN_74X164_NUMBER_GPIOS * chip->registers;

    of_property_read_u8_array(spi->dev.of_node, "registers-default",
                  chip->buffer, chip->registers);

    chip->gpio_chip.can_sleep = true;


[개발노트] Distribution-package의 u-boot 수정 및 컴파및 수정 [ums 이용]

1. devtool modify u-boot-stm32mp
(뭔가 잘못됬을시에는 devtool reset u-boot-stm32mp )

2. 소스수정. 위치는 workspace/source........

3. devtool build u-boot-stm32mp

4. bitbake u-boot-stm32mp -c deploy

5. bitbake tf-a-stm32mp -c deploy -f

최종폴더 fip에 결합된 fipXXX.bin파일이 있음.

u-boot> ums 0 mmc 1
PC$> ls -l /dev/disk/by-partlabel/
lrwxrwxrwx 1 root root 10  7월 18 14:47  boot -> ../../sdd2
lrwxrwxrwx 1 root root 10  7월 18 14:47  fip -> ../../sdd1
lrwxrwxrwx 1 root root 10  7월 18 14:47  rootfs -> ../../sdd4
lrwxrwxrwx 1 root root 10  7월 18 14:47  vendorfs -> ../../sdd3

sudo dd if=tmp-glibc/deploy/images/stm32mp153d-ssonic/fip/fip-stm32mp153d-ssonic-trusted.bin of=/dev/sdd1 bs=1M conv=fdatasync
[sudo] happycpu 암호:
0+1 레코드 들어옴
0+1 레코드 나감
1042421 bytes (1.0 MB, 1018 KiB) copied, 0.0663301 s, 15.7 MB/s

u-boot> reset


2022-07-15

[개발노트]kirkstone build

$ mkdir kirk

$ cd kirk

$ repo init -u https://github.com/STMicroelectronics/oe-manifest.git -b refs/tags/openstlinux-5.15-yocto-kirkstone-mp1-v22.06.15

Fetching: 100% (8/8), done in 5m51.931s
Garbage collecting: 100% (8/8), done in 0.029s
Checking out: 100% (8/8), done in 0.699s
repo sync has finished successfully

$ ls
layers

mx폴더 구성

kirk/layers/meta-st/meta-st-stm32mp-addons/mx/stm32mp153d-ssonic$ ls
kernel  optee-os  tf-a  u-boot

// conf 복사.

kirk/layers/meta-st/meta-st-stm32mp-addons/conf/machine$ ls
examples  stm32mp13-mx.conf  stm32mp15-mx.conf  stm32mp153d-ssonic.conf

// eula 구성

kirk/layers/meta-st/meta-st-stm32mp-addons/conf/eula$ ls
LICENCE.broadcom_bcm43xx  Vivante_GPU_drivers-End_User_Software_License_Terms.txt  stm32mp15-mx
LICENCE.cypress           en.SLA0048.txt                                           stm32mp153d-ssonic
ST_EULA_ALPHA             en.sla0078.txt
ST_EULA_SLA               stm32mp13-mx

 

kirk/layers/meta-st$ MACHINE=stm32mp153d-ssonic DISTRO=openstlinux-weston source layers/meta-st/script/envsetup.sh

 

*주의할점.

MACHINE이름은 꼭. stm32mp15까지는 붙여준다. 이름을 해석해서 해더파일이 합쳐지는 동작이있다.


[개발노트] led, pwm 스크립트




혹시 실행이 안될시에는 파일실행속성 추가

chmod a+x gpio.sh
chmod a+x pwm.sh

[개발노트] esp32c3 적용.



요점
esp32c3의 spi모드가 2-->3으로 변경되어야하므로, esp32c3의 prebuild이미지는 사용할수가 없음.
uart hci는 사용하지않고 spi로만 사용함.-->vhci 모드라고 함.
블루투스는 표준규칙을 잘 따르는듯 한데 wifi는 약간 야매느낌이다.
wifi는 esp32에서 다 해주고. 뭔가 별도의 내부프로토콜로 esp32로의 통신을 중계해주는 구라 network interface 인듯함. 그래서 쓰는법도 좀 다른듯하고 해서 찬찬히 연구해볼필요있음.

순서.
1. esp-hosted의 리눅스 드라이버 빌드
esp-hosted/host/linux/host_driver/esp32/spi/esp_spi.c 아래와 같이 수정.
    //esp_board.mode = SPI_MODE_2;
    esp_board.mode = SPI_MODE_3;
    //esp_board.max_speed_hz = spi_clk_mhz * NUMBER_1M;
    esp_board.max_speed_hz = 5 * NUMBER_1M;

  esp-hosted/host/linux/host_driver/esp32/spi/esp_spi.h 핀번호 변경 ev1 값이므로 ssonic은 다른 번호겠지.  
//#define HANDSHAKE_PIN           111 //evm
#define HANDSHAKE_PIN           105 // ssonic gpiog15
#define SPI_IRQ                 gpio_to_irq(HANDSHAKE_PIN)
//#define SPI_DATA_READY_PIN      55 // evm
#define SPI_DATA_READY_PIN      77 // ssonic gpiob9
#define SPI_DATA_READY_IRQ      gpio_to_irq(SPI_DATA_READY_PIN)

  esp-hosted/host/linux/host_driver/esp32/main.c delay있는 두줄 추가.   
#define HOST_GPIO_PIN_INVALID -1
static int resetpin = HOST_GPIO_PIN_INVALID;
static int delay = 0;
module_param(resetpin, int, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
MODULE_PARM_DESC(resetpin, "Host's GPIO pin number which is connected to ESP32's EN to reset ESP32 device");
module_param(delay, int, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);

#if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 14, 0))

source /home/happycpu/work/Developer-Package/SDK/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi
export KERNEL=/home/happycpu/work/Developer-Package/stm32mp1-openstlinux-5.10-dunfell-mp1-21-11-17/sources/arm-ostl-linux-gnueabi/linux-stm32mp-5.10.61-stm32mp-r2-r0/linux-5.10.61.ev1
make target=spi ARCH=$ARCH CROSS_COMPILE=$CROSS_COMPILE KERNEL=$KERNEL resetpin=3 
#resetpin은 컴파일할데 인자로 리셋핀을 지정하는 방법임. 지정하지않을경우, 기본3으로 정의됨.gpio번호임. 다른거라면 다른번호로 지정해야함.
happycpu@happycpubox:~/work/testproj/esp-hosted/host/linux/host_driver/esp32$ source /home/happycpu/work/Developer-Package/SDK/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi
happycpu@happycpubox:~/work/testproj/esp-hosted/host/linux/host_driver/esp32$ export KERNEL=/home/happycpu/work/Developer-Package/stm32mp1-openstlinux-5.10-dunfell-mp1-21-11-17/sources/arm-ostl-linux-gnueabi/linux-stm32mp-5.10.61-stm32mp-r2-r0/linux-5.10.61.ev1
happycpu@happycpubox:~/work/testproj/esp-hosted/host/linux/host_driver/esp32$ make target=spi ARCH=$ARCH CROSS_COMPILE=$CROSS_COMPILE KERNEL=$KERNEL resetpin=3
rm -rf *.o sdio/*.o spi/*.o *.ko
make ARCH=arm CROSS_COMPILE=arm-ostl-linux-gnueabi- -C /home/happycpu/work/Developer-Package/stm32mp1-openstlinux-5.10-dunfell-mp1-21-11-17/sources/arm-ostl-linux-gnueabi/linux-stm32mp-5.10.61-stm32mp-r2-r0/linux-5.10.61.ev1 M=/home/happycpu/work/testproj/esp-hosted/host/linux/host_driver/esp32 clean
make[1]: 디렉터리 '/home/happycpu/work/Developer-Package/stm32mp1-openstlinux-5.10-dunfell-mp1-21-11-17/sources/arm-ostl-linux-gnueabi/linux-stm32mp-5.10.61-stm32mp-r2-r0/linux-5.10.61.ev1' 들어감
  CLEAN   /home/happycpu/work/testproj/esp-hosted/host/linux/host_driver/esp32/Module.symvers
make[1]: 디렉터리 '/home/happycpu/work/Developer-Package/stm32mp1-openstlinux-5.10-dunfell-mp1-21-11-17/sources/arm-ostl-linux-gnueabi/linux-stm32mp-5.10.61-stm32mp-r2-r0/linux-5.10.61.ev1' 나감
make ARCH=arm CROSS_COMPILE=arm-ostl-linux-gnueabi- -C /home/happycpu/work/Developer-Package/stm32mp1-openstlinux-5.10-dunfell-mp1-21-11-17/sources/arm-ostl-linux-gnueabi/linux-stm32mp-5.10.61-stm32mp-r2-r0/linux-5.10.61.ev1 M=/home/happycpu/work/testproj/esp-hosted/host/linux/host_driver/esp32 modules
make[1]: 디렉터리 '/home/happycpu/work/Developer-Package/stm32mp1-openstlinux-5.10-dunfell-mp1-21-11-17/sources/arm-ostl-linux-gnueabi/linux-stm32mp-5.10.61-stm32mp-r2-r0/linux-5.10.61.ev1' 들어감
  CC [M]  /home/happycpu/work/testproj/esp-hosted/host/linux/host_driver/esp32/esp_bt.o
  CC [M]  /home/happycpu/work/testproj/esp-hosted/host/linux/host_driver/esp32/main.o
  CC [M]  /home/happycpu/work/testproj/esp-hosted/host/linux/host_driver/esp32/spi/esp_spi.o
  CC [M]  /home/happycpu/work/testproj/esp-hosted/host/linux/host_driver/esp32/esp_serial.o
  CC [M]  /home/happycpu/work/testproj/esp-hosted/host/linux/host_driver/esp32/esp_rb.o
  LD [M]  /home/happycpu/work/testproj/esp-hosted/host/linux/host_driver/esp32/esp32_spi.o
  MODPOST /home/happycpu/work/testproj/esp-hosted/host/linux/host_driver/esp32/Module.symvers
  CC [M]  /home/happycpu/work/testproj/esp-hosted/host/linux/host_driver/esp32/esp32_spi.mod.o
  LD [M]  /home/happycpu/work/testproj/esp-hosted/host/linux/host_driver/esp32/esp32_spi.ko
make[1]: 디렉터리 '/home/happycpu/work/Developer-Package/stm32mp1-openstlinux-5.10-dunfell-mp1-21-11-17/sources/arm-ostl-linux-gnueabi/linux-stm32mp-5.10.61-stm32mp-r2-r0/linux-5.10.61.ev1' 나감
happycpu@happycpubox:~/work/testproj/esp-hosted/host/linux/host_driver/esp32$ 

출력파일은 
happycpu@happycpubox:~/work/testproj/esp-hosted/host/linux/host_driver/esp32$ ls
LICENSE   Module.symvers  esp32_spi.ko   esp32_spi.mod.c  esp32_spi.o  esp_bt.c  esp_bt_api.h  esp_rb.c  esp_rb.o      esp_serial.h  main.c  modules.order  spi
Makefile  esp.h           esp32_spi.mod  esp32_spi.mod.o  esp_api.h    esp_bt.o  esp_if.h      esp_rb.h  esp_serial.c  esp_serial.o  main.o  sdio
happycpu@happycpubox:~/work/testproj/esp-hosted/host/linux/host_driver/esp32$ 

scp로 넘겨서 사용. 향후 드라이버는 커널에 합치고, 아래 dev파일은 rootfs에 미리 만들어놓는다. 그래서 부팅하면서 자연스럽게 드라이버까지 올라가도록 
rmmod esp32_spi &> /dev/null
insmod esp32_spi.ko resetpin=3
mknod /dev/esps0 c 221 0
chmod 666 /dev/esps0

2. esp-hosted의 esp32c3용 driver수정.
  esp-hosted/esp/esp_driver/network_adapter/main/spi_slave_api.c 수정 SPI_MODE_3 으로..
    /* Configuration for the SPI slave interface */
    spi_slave_interface_config_t slvcfg={
        //.mode=SPI_MODE_2,
        .mode=SPI_MODE_3,
        .spics_io_num=GPIO_CS,
        .queue_size=SPI_QUEUE_SIZE,
        .flags=0,
        .post_setup_cb=spi_post_setup_cb,
        .post_trans_cb=spi_post_trans_cb
    };

3. esp-hosted의 test용 app 빌드
파이썬이 아닌 c언어 app으로 드라이버를 제어하는 유틸 및 api사용법, api라이브러리 사용법등이 이곳에 있음.
샘플 test.out 파일을 컴파일한다. (그걸로 ap scan 등등을 드라이버로 시킬수있다)
esp-hosted/esp-hosted/host/linux/host_control/c_support
Makefile 수정
첫쩨줄의 gcc를 주석처리함.
#CC = gcc

CROSS_COMPILE :=

컴파일
happycpu@happycpubox:~/work/esp-hosted/esp-hosted/host/linux/host_control/c_support$ make
arm-ostl-linux-gnueabi-gcc  -mthumb -mfpu=neon-vfpv4 -mfloat-abi=hard -mcpu=cortex-a7 --sysroot=/home/happycpu/work/Developer-Package/SDK/sysroots/cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi -C -Wall  -I/home/happycpu/work/esp-hosted/esp-hosted/host/linux/host_control/c_support/../../../host_common/include/ -I/home/happycpu/work/esp-hosted/esp-hosted/host/linux/host_control/c_support/../../../../common//protobuf-c/ -I/home/happycpu/work/esp-hosted/esp-hosted/host/linux/host_control/c_support/../../../../common//include/ /home/happycpu/work/esp-hosted/esp-hosted/host/linux/host_control/c_support/../../../../common//protobuf-c/protobuf-c/protobuf-c.c /home/happycpu/work/esp-hosted/esp-hosted/host/linux/host_control/c_support/platform_wrapper.c /home/happycpu/work/esp-hosted/esp-hosted/host/linux/host_control/c_support/../../../../common//esp_hosted_config.pb-c.c /home/happycpu/work/esp-hosted/esp-hosted/host/linux/host_control/c_support/../../../host_common/transport_pserial.c /home/happycpu/work/esp-hosted/esp-hosted/host/linux/host_control/c_support/../../../host_common/commands.c test_api.c test.c -o test.out
happycpu@happycpubox:~/work/esp-hosted/esp-hosted/host/linux/host_control/c_support$ ls
Makefile  platform_wrapper.c  stress.c  test.c  test.out  test_api.c  test_api.h  test_config.h

scp로 넘겨서 사용.


4. device tree
실컷 유저모드 spi설정 다 해놓고선. 마지막에 다시 disable하는것이 끝.
// stm32mp157c-ev1 board.
&spi1{

    pinctrl-names = "default", "sleep";
    pinctrl-0 = <&spi1_pins_z_mx>;
    pinctrl-1 = <&spi1_sleep_pins_z_mx>;
    status = "okay";

    cs-gpios = <&gpioz 3 0>;
    bus-num = <1>;
    num-chipselects = <1>;
   
    #address-cells = <1>;
    #size-cells = <0>;

    spidev1: spi@1{
        status = "okay";
        compatible = "spidev";
        reg = <0>;
        spi-max-frequency = <10000000>;
    };
};

&spidev1{
    status = "disable";
};
//////////////////////////////////////////
// stm32mp153d-ssonic
&spi2{
    pinctrl-names = "default","sleep";
    pinctrl-0 = <&spi2_pins_mx>;
    pinctrl-1 = <&spi2_sleep_pins_mx>;
    status = "okay";
    cs-gpios = <&gpiob 25 0>;

    // /delete-property/dmas;
    // /delete-property/dma-names;

    spidev:spidev@0{
        compatible = "linux,spidev";
        status = "okay";
        reg = <0>;
        spi-max-frequency = <10000000>;
    };
};

&spidev{
    status = "disable";
};

5. yocto bluez
버전을 꼭 높은것을 써야 Codedphy를 사용할수있을듯
레시피에 추가한다. bblayer.conf


참, esp32c3용으로 빌드는
idf.py set-target esp32c3

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

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