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;


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

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