embeded/i.mx 8m plus2026. 10. 21. 18:29

imx8mp 에는 여러가지 이상한(?) 것들이 달려있다.

cortex-m7 800Mhz 랑

HiFi DSP 라고 tensilica / xtensa 계열 dsp가 그건데

Advanced Multimedia and Display

  • Video Decode: 1080p60, h.265/4, VP9, VP8
  • Video Encode: 1080p60, h.265/4
  • GPU: 16 GFLOPS (high-precision) OpenGL® ES 3.1/3.0, Vulkan®, Open CL™ 1.2 FP, OpenVG™ 1.1
  • Audio: 18x I2S TDM, DSD512, S/PDIF Tx + Rx, 8-ch PDM Mic input, eARC, ASRC
  • Low power voice accelerator: Cadence® Tensilica® HiFi 4 DSP @ 800 MHz
  • Display: MIPI-DSI, HDMI® 2.0a Tx, LVDS (4/8-lane) Tx

[링크 : https://www.nxp.com/products/i.MX8MPLUS]

 

이전에 생각만 해오던거 오늘은 ai 도움으로 조사중

4 Building DSP Framework on Linux OS
Before you compile the DSP-related code, set up the DSP-related toolchains. The DSP framework, DSP codec wrapper, and DSP codec use Xtensa development toolchain.

[링크 : https://www.nxp.com/docs/en/user-guide/UG10167.pdf]

 

cortex-m7 처럼 rpmsg로 하고, 똑같은 방법으로 펌웨어를 올려서 작동시키면 된다.

기본 컨셉은 ahb를 통해 주변장치가 있으니까 도메인이 존재할거고

리눅스 dtb는 리눅스에서 사용하지 않을 녀석(mcu 들이 사용할 녀석을 제외)을 골라서 사용한다.

ddr 메모리는 mcu / dsp 통신용으로 영역을 선정하고(즉, 리눅스에서 사용하지 않도록 영역 지정)

rpmsg 를 통해서 거기 데이터 있으니 가져가서 처리하라고 찔러준다.

 

xtensa 이긴한데 정확한 아키텍쳐는 찾아봐도 안나오고

그래도 혹시나 하는 마음에 esp32 / esp32-s2 / esp826 바이너리를 빌드해서 dsp에서 돌아가나 테스트 해보려고 함

 

다운로드 경로(zephyr rtos sdk)

[링크 : https://github.com/zephyrproject-rtos/sdk-ng/releases/]

 

테스트 결과

 

일단 esp32 / esp32-s2 로도 돌릴수 있는데 이상하게 느리다는게 좀 단점

zephyr의 것을 쓰면 아무튼 cadence sdk 안쓰고도 가벼운건 돌릴수 있다 정도가 될 듯.

 

+

2026.10.22

zephyr 언급된 문서들

 

AN13970 Running Zephyr RTOS on Cadence Tensilica HiFi 4 DSP

[링크 : https://www.nxp.com/docs/en/application-note/AN13970.pdf]

    [링크 : https://community.nxp.com/t5/i-MX-Processors/Programming-the-Tensilica-HiFi4-DSP/m-p/2079878]

    [링크 : https://openamp-libopenamp-prs.readthedocs.io/en/latest/demos/system_reference-NXP.html]

For details on how to harness the power processing of the DSP by running Zephyr RTOS on the DSP, while running Linux OS on the main Cortex-A core, see the Running Zephyr RTOS on Cadence Tensilica HiFi 4 DSP (AN13970). This covers simple and more complex examples, such as hello_world or IPC samples. In the application note, all examples are explained using the existing drivers and/or frameworks from the Linux OS and Zephyr RTOS.

[링크 : https://www.nxp.jp/docs/en/user-guide/UG10167.pdf]

 

[링크 : https://github.com/zephyrproject-rtos/zephyr/tree/main/samples/hello_world]

    [링크 : https://www.nxp.com/company/about-nxp/smarter-world-blog/BL-HIFI4-DSP-CORE-WITH-ZEPHYR]

 

'embeded > i.mx 8m plus' 카테고리의 다른 글

eiq-portal로 학습 시도(cpu)  (0) 2026.05.27
nxp CMSIS-NN  (0) 2026.05.13
g2d_surface g2d_blit()  (0) 2026.02.10
eiq 모델 정리  (0) 2025.09.16
eiq 데이터 구조  (0) 2025.09.05
Posted by 구차니
embeded/ARM2026. 10. 21. 12:30

리눅스 재단에서 관리하는 rtos 라고 한다.

한번 들여다는 봐야겠네. freeRTOS 보다는 인지도가 없으려나?

 

 [링크 : https://www.nxp.com/docs/en/application-note/AN13970.pdf]

 [링크 : https://www.zephyrproject.org/]

 [링크 : https://m.blog.naver.com/chcbaram/222755342935]

 

+

claude 말로는 아래와 같다고 한다.

그나저나 freertos가 aws에 인수 당했구나..

[링크 : https://www.clien.net/service/board/news/11501037]

 

'embeded > ARM' 카테고리의 다른 글

mbed studio with 32f469idiscovery  (0) 2026.02.21
mbed studio / cli  (0) 2026.02.20
Ethos-U85  (0) 2026.02.06
SVE(Scalable Vector Extension)  (0) 2025.08.28
emmc 파티션 정렬  (0) 2024.02.07
Posted by 구차니
embeded/FPGA - ALTERA2026. 10. 16. 23:30

fpga 다루는 언어인가?

 

scala 라는 언어에 포함 되어있는 하드웨어 

import 보이니 먼가 python 같으면서도 var 대신 val 이니 nodel.js 같기도 하고?

import chisel3._

class MyBundle extends Bundle {
  val foo = UInt(4.W)
  val bar = UInt(4.W)
}

class Foo extends Module {
  val bundle = Wire(new MyBundle)
  bundle.foo := 0xc.U
  bundle.bar := 0x3.U
  val uint = bundle.asUInt
  printf(cf"$uint") // 195

  // Test
  assert(uint === 0xc3.U)
}

[링크 : https://www.chisel-lang.org/docs]

[링크 : https://www.chisel-lang.org/]

 

import chisel3._
import chisel3.util.Counter
import circt.stage.ChiselStage

class Blinky(freq: Int, startOn: Boolean = false) extends Module {
  val io = IO(new Bundle {
    val led0 = Output(Bool())
  })
  // Blink LED every second using Chisel built-in util.Counter
  val led = RegInit(startOn.B)
  val (_, counterWrap) = Counter(true.B, freq / 2)
  when(counterWrap) {
    led := ~led
  }
  io.led0 := led
}

object Main extends App {
  // These lines generate the Verilog output
  println(
    ChiselStage.emitSystemVerilog(
      new Blinky(1000),
      firtoolOpts = Array("-disable-all-randomization", "-strip-debug-info")
    )
  )
}

[링크 : https://github.com/chipsalliance/chisel]

[링크 : https://en.wikipedia.org/wiki/Chisel_(programming_language)]

'embeded > FPGA - ALTERA' 카테고리의 다른 글

ghdl 사용해봄  (0) 2026.05.08
DE1-SOC LXDE 부팅 완료  (0) 2026.05.02
altera cyclone V HPS BOOTSEL, CLOCKSEL  (0) 2026.04.29
DE1-SOC getting started guide 따라하기  (0) 2026.04.28
nios II 단종  (0) 2026.03.22
Posted by 구차니
embeded/Cortex-M3 STM2026. 9. 23. 14:17

아두이노 예제밖에 안보이냐..

[링크 : https://mobilitykids.tistory.com/entry/MAX7219-LED-매트릭스-디스플레이Arduino-튜토리얼-포함]

[링크 : https://m.blog.naver.com/eduino/222651170585]

 

spi 같긴한데.. 원래는 7seg 용으로 개발되었으나 dot matrix에서도 쓰는건가?

Features
● 10MHz Serial Interface
● Individual LED Segment Control
● Decode/No-Decode Digit Selection
● 150μA Low-Power Shutdown (Data Retained)
● Digital and Analog Brightness Control
● Display Blanked on Power-Up
● Drive Common-Cathode LED Display
● Slew-Rate Limited Segment Drivers for Lower EMI (MAX7221)
● SPI, QSPI, MICROWIRE Serial Interface (MAX7221)

[링크 : https://www.analog.com/media/en/technical-documentation/data-sheets/max7219-max7221.pdf]

 

+

선도 연결방법 알려달라고 하고

어떻게 어떻게 해서  claude가 다 해줘버리네. 인간은 멀 취미로 해야하지?

ai가 해준걸 취미라고 해도 될까? 고민되네..

 

/*
 * max7219.h
 *
 * MAX7219 8x8 도트매트릭스(데이지체인) 구동 + 텍스트 스크롤 드라이버.
 * SPI(하드웨어)로 DIN/CLK를 보내고, CS(LOAD)는 별도 GPIO로 직접 제어한다.
 */
#ifndef __MAX7219_H
#define __MAX7219_H

#ifdef __cplusplus
extern "C" {
#endif

#include "stm32f1xx_hal.h"

/* 체인에 연결된 8x8 모듈 개수. 모듈 1개만 있으면 1로 바꿀 것. */
#define MAX7219_NUM_DEVICES   4

/* 하드웨어 배선에 따라 좌우/모듈 순서가 반대로 보이면 아래 두 값을 바꿔서 조정 */
#define MAX7219_REVERSE_CHAIN 1   /* 텍스트가 모듈 순서상 반대로 표시되면 1 (실측: 4 3 2 1로 나와서 1로 설정) */
#define MAX7219_MIRROR_COLS   0   /* 글자가 좌우 반전되어 보이면 1 */

void MAX7219_Init(SPI_HandleTypeDef *hspi);
void MAX7219_Clear(void);
void MAX7219_SetIntensity(uint8_t level /* 0x0~0xF */);

/* 표시할 문자열을 설정(내부 컬럼 버퍼에 렌더링해 둠). ASCII만 지원(공백,0-9,A-Z,.,!,-) */
void MAX7219_SetText(const char *text);

/* 한 프레임(1컬럼) 스크롤 진행 + 출력. 텍스트가 한 바퀴 돌면 1을 반환(그 외 0). */
uint8_t MAX7219_ScrollStep(void);

/* 진단용: 스크롤 없이 모듈(0번부터)마다 고정 숫자 1,2,3,4...를 동시에 정적으로 표시.
 * 다중 디바이스 주소 지정이 정상인지 확인할 때만 임시로 사용. */
void MAX7219_ShowDeviceIndexTest(void);

#ifdef __cplusplus
}
#endif

#endif /* __MAX7219_H */

 

/*
 * max7219.c
 *
 * MAX7219 8x8 도트매트릭스 체인 구동 + 좌->우 텍스트 스크롤.
 *
 * 배선(하드웨어 SPI1 사용):
 *   MAX7219 DIN  -> PA7 (SPI1_MOSI)
 *   MAX7219 CLK  -> PA5 (SPI1_SCK)
 *   MAX7219 CS   -> PA4 (일반 GPIO, 소프트웨어 제어)
 *   MAX7219 VCC  -> 5V,  GND -> GND
 *
 * 레지스터 모델: MAX7219는 디코드모드 OFF 상태에서 DIGIT0~7 레지스터 각각이
 * 매트릭스의 "행(row)"이며, 그 8bit가 그 행의 8개 열(column)을 나타낸다.
 * 따라서 프레임을 만들 때는 (행, 각 모듈별 8bit) 형태로 SPI에 실어야 한다.
 */
#include "main.h"
#include "max7219.h"
#include <string.h>
#include <ctype.h>

#define MAX7219_REG_NOOP        0x00
#define MAX7219_REG_DIGIT0      0x01
#define MAX7219_REG_DECODEMODE  0x09
#define MAX7219_REG_INTENSITY   0x0A
#define MAX7219_REG_SCANLIMIT   0x0B
#define MAX7219_REG_SHUTDOWN    0x0C
#define MAX7219_REG_DISPLAYTEST 0x0F

#define MAX7219_TOTAL_COLS      (MAX7219_NUM_DEVICES * 8)

/* 표시 가능한 최대 문자열 길이(글자당 6컬럼 = 5폭+1간격) + 앞뒤 여백 */
#define MAX7219_TEXT_MAX_CHARS  64
#define MAX7219_COLBUF_SIZE     (MAX7219_TOTAL_COLS * 2 + MAX7219_TEXT_MAX_CHARS * 6)

static SPI_HandleTypeDef *s_hspi;
static uint8_t  s_colbuf[MAX7219_COLBUF_SIZE];
static uint32_t s_colbuf_len;
static uint32_t s_scroll_offset;

/* ---- 5x7 폰트: 행(row) 단위 원본 표현. 각 바이트의 bit4..bit0 = 좌->우 5개 컬럼 ---- */
typedef struct { char ch; uint8_t rows[7]; } Glyph5x7;

static const Glyph5x7 s_font[] = {
  {' ', {0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000}},
  {'0', {0b01110,0b10001,0b10011,0b10101,0b11001,0b10001,0b01110}},
  {'1', {0b00100,0b01100,0b00100,0b00100,0b00100,0b00100,0b01110}},
  {'2', {0b01110,0b10001,0b00001,0b00010,0b00100,0b01000,0b11111}},
  {'3', {0b11111,0b00010,0b00100,0b00010,0b00001,0b10001,0b01110}},
  {'4', {0b00010,0b00110,0b01010,0b10010,0b11111,0b00010,0b00010}},
  {'5', {0b11111,0b10000,0b11110,0b00001,0b00001,0b10001,0b01110}},
  {'6', {0b00110,0b01000,0b10000,0b11110,0b10001,0b10001,0b01110}},
  {'7', {0b11111,0b00001,0b00010,0b00100,0b01000,0b01000,0b01000}},
  {'8', {0b01110,0b10001,0b10001,0b01110,0b10001,0b10001,0b01110}},
  {'9', {0b01110,0b10001,0b10001,0b01111,0b00001,0b00010,0b01100}},
  {'A', {0b01110,0b10001,0b10001,0b11111,0b10001,0b10001,0b10001}},
  {'B', {0b11110,0b10001,0b10001,0b11110,0b10001,0b10001,0b11110}},
  {'C', {0b01111,0b10000,0b10000,0b10000,0b10000,0b10000,0b01111}},
  {'D', {0b11110,0b10001,0b10001,0b10001,0b10001,0b10001,0b11110}},
  {'E', {0b11111,0b10000,0b10000,0b11110,0b10000,0b10000,0b11111}},
  {'F', {0b11111,0b10000,0b10000,0b11110,0b10000,0b10000,0b10000}},
  {'G', {0b01111,0b10000,0b10000,0b10011,0b10001,0b10001,0b01111}},
  {'H', {0b10001,0b10001,0b10001,0b11111,0b10001,0b10001,0b10001}},
  {'I', {0b01110,0b00100,0b00100,0b00100,0b00100,0b00100,0b01110}},
  {'J', {0b00111,0b00010,0b00010,0b00010,0b00010,0b10010,0b01100}},
  {'K', {0b10001,0b10010,0b10100,0b11000,0b10100,0b10010,0b10001}},
  {'L', {0b10000,0b10000,0b10000,0b10000,0b10000,0b10000,0b11111}},
  {'M', {0b10001,0b11011,0b10101,0b10101,0b10001,0b10001,0b10001}},
  {'N', {0b10001,0b11001,0b10101,0b10101,0b10011,0b10001,0b10001}},
  {'O', {0b01110,0b10001,0b10001,0b10001,0b10001,0b10001,0b01110}},
  {'P', {0b11110,0b10001,0b10001,0b11110,0b10000,0b10000,0b10000}},
  {'Q', {0b01110,0b10001,0b10001,0b10001,0b10101,0b10010,0b01101}},
  {'R', {0b11110,0b10001,0b10001,0b11110,0b10100,0b10010,0b10001}},
  {'S', {0b01111,0b10000,0b10000,0b01110,0b00001,0b00001,0b11110}},
  {'T', {0b11111,0b00100,0b00100,0b00100,0b00100,0b00100,0b00100}},
  {'U', {0b10001,0b10001,0b10001,0b10001,0b10001,0b10001,0b01110}},
  {'V', {0b10001,0b10001,0b10001,0b10001,0b10001,0b01010,0b00100}},
  {'W', {0b10001,0b10001,0b10001,0b10101,0b10101,0b10101,0b01010}},
  {'X', {0b10001,0b10001,0b01010,0b00100,0b01010,0b10001,0b10001}},
  {'Y', {0b10001,0b10001,0b01010,0b00100,0b00100,0b00100,0b00100}},
  {'Z', {0b11111,0b00001,0b00010,0b00100,0b01000,0b10000,0b11111}},
  {'.', {0b00000,0b00000,0b00000,0b00000,0b00000,0b01100,0b01100}},
  {'!', {0b00100,0b00100,0b00100,0b00100,0b00100,0b00000,0b00100}},
  {'-', {0b00000,0b00000,0b00000,0b11111,0b00000,0b00000,0b00000}},
};
#define FONT_COUNT (sizeof(s_font) / sizeof(s_font[0]))

static const Glyph5x7 *font_lookup(char c)
{
  if (c >= 'a' && c <= 'z') c = (char)(c - 'a' + 'A'); /* 소문자 -> 대문자 */
  for (uint32_t i = 0; i < FONT_COUNT; i++)
  {
    if (s_font[i].ch == c) return &s_font[i];
  }
  return &s_font[0]; /* 지원 안 하는 문자는 공백으로 */
}

/* row(0=top..6=bottom) 문자열 비트에서 col(0=left..4)에 해당하는 컬럼 바이트를 뽑아
 * bit r 위치에 채운다 (bit0=top row ... bit6=bottom row). */
static uint8_t glyph_col_byte(const Glyph5x7 *g, uint8_t col)
{
  uint8_t val = 0;
  for (uint8_t r = 0; r < 7; r++)
  {
    uint8_t bit = (g->rows[r] >> (4 - col)) & 0x01U;
    val |= (uint8_t)(bit << r);
  }
  return val;
}

/* ---- 저수준 SPI 전송 ---- */

static inline void cs_low(void)  { HAL_GPIO_WritePin(MAX7219_CS_PORT, MAX7219_CS_PIN, GPIO_PIN_RESET); }
static inline void cs_high(void) { HAL_GPIO_WritePin(MAX7219_CS_PORT, MAX7219_CS_PIN, GPIO_PIN_SET); }

/* 체인의 모든 모듈에 동일한 (reg,data)를 전송 (초기화/공통 설정용) */
static void max7219_write_all(uint8_t reg, uint8_t data)
{
  uint8_t buf[2] = { reg, data };
  cs_low();
  for (uint32_t i = 0; i < MAX7219_NUM_DEVICES; i++)
  {
    HAL_SPI_Transmit(s_hspi, buf, 2, HAL_MAX_DELAY);
  }
  cs_high();
}

/* 한 행(row 0~7)에 대해 모듈별 8bit 데이터를 체인에 맞는 순서로 전송.
 * dev_data[0] = MCU와 가장 가까운(첫번째) 모듈. SPI 시프트 특성상 체인에서는
 * 가장 먼 모듈 데이터부터 먼저 밀어넣어야 CS 상승 시 올바르게 래치된다. */
static void max7219_send_row(uint8_t row, const uint8_t *dev_data)
{
  uint8_t reg = (uint8_t)(MAX7219_REG_DIGIT0 + row);
  cs_low();
#if MAX7219_REVERSE_CHAIN
  for (int32_t dev = 0; dev < MAX7219_NUM_DEVICES; dev++)
#else
  for (int32_t dev = MAX7219_NUM_DEVICES - 1; dev >= 0; dev--)
#endif
  {
    uint8_t buf[2] = { reg, dev_data[dev] };
    HAL_SPI_Transmit(s_hspi, buf, 2, HAL_MAX_DELAY);
  }
  cs_high();
}

void MAX7219_Init(SPI_HandleTypeDef *hspi)
{
  s_hspi = hspi;

  max7219_write_all(MAX7219_REG_DISPLAYTEST, 0x00);
  max7219_write_all(MAX7219_REG_SCANLIMIT, 0x07);   /* 8자리(행) 전부 사용 */
  max7219_write_all(MAX7219_REG_DECODEMODE, 0x00);  /* BCD 디코드 없음: 매트릭스 모드 */
  max7219_write_all(MAX7219_REG_INTENSITY, 0x04);   /* 밝기 0x0~0xF */
  max7219_write_all(MAX7219_REG_SHUTDOWN, 0x01);    /* 0=shutdown, 1=normal operation */

  MAX7219_Clear();
}

void MAX7219_SetIntensity(uint8_t level)
{
  max7219_write_all(MAX7219_REG_INTENSITY, (uint8_t)(level & 0x0FU));
}

void MAX7219_Clear(void)
{
  uint8_t zeros[MAX7219_NUM_DEVICES];
  memset(zeros, 0, sizeof(zeros));
  for (uint8_t row = 0; row < 8; row++)
  {
    max7219_send_row(row, zeros);
  }
}

void MAX7219_SetText(const char *text)
{
  uint32_t len = 0;

  /* 화면 밖에서 스크롤 들어오도록 앞쪽 여백(패널 폭만큼 공백) */
  for (uint32_t i = 0; i < MAX7219_TOTAL_COLS && len < MAX7219_COLBUF_SIZE; i++)
  {
    s_colbuf[len++] = 0x00;
  }

  for (const char *p = text; *p != '\0' && len + 6 <= MAX7219_COLBUF_SIZE; p++)
  {
    const Glyph5x7 *g = font_lookup(*p);
    for (uint8_t c = 0; c < 5; c++)
    {
      s_colbuf[len++] = glyph_col_byte(g, c);
    }
    s_colbuf[len++] = 0x00; /* 글자 사이 1컬럼 간격 */
  }

  /* 화면 밖으로 완전히 빠져나가도록 뒤쪽 여백 */
  for (uint32_t i = 0; i < MAX7219_TOTAL_COLS && len < MAX7219_COLBUF_SIZE; i++)
  {
    s_colbuf[len++] = 0x00;
  }

  s_colbuf_len = len;
  s_scroll_offset = 0;
}

static void render_frame(void)
{
  uint8_t dev_row[MAX7219_NUM_DEVICES];

  if (s_colbuf_len == 0) return;

  for (uint8_t row = 0; row < 8; row++)
  {
    for (uint32_t dev = 0; dev < MAX7219_NUM_DEVICES; dev++)
    {
      uint8_t val = 0;
      for (uint8_t c = 0; c < 8; c++)
      {
        uint32_t col_index = (s_scroll_offset + dev * 8U + c) % s_colbuf_len;
        uint8_t bit = (s_colbuf[col_index] >> row) & 0x01U;
#if MAX7219_MIRROR_COLS
        val |= (uint8_t)(bit << c);
#else
        val |= (uint8_t)(bit << (7 - c));
#endif
      }
      dev_row[dev] = val;
    }
    max7219_send_row(row, dev_row);
  }
}

uint8_t MAX7219_ScrollStep(void)
{
  render_frame();

  if (s_colbuf_len == 0) return 1;

  s_scroll_offset++;
  if (s_scroll_offset >= s_colbuf_len)
  {
    s_scroll_offset = 0;
    return 1;
  }
  return 0;
}

/* 각 모듈에 스크롤 없이 고정 숫자를 동시에 정적으로 표시(디버그용).
 * dev=0 -> "1", dev=1 -> "2" ... 모듈이 서로 다른 내용을 "동시에" 보여주는지,
 * 그리고 계속 켜진 상태로 유지되는지(깜빡임/순차갱신 없는지) 확인하는 용도. */
void MAX7219_ShowDeviceIndexTest(void)
{
  uint8_t dev_row[MAX7219_NUM_DEVICES];
  const Glyph5x7 *glyphs[MAX7219_NUM_DEVICES];

  for (uint32_t dev = 0; dev < MAX7219_NUM_DEVICES; dev++)
  {
    char digit = (char)('1' + (dev % 9));
    glyphs[dev] = font_lookup(digit);
  }

  for (uint8_t row = 0; row < 8; row++)
  {
    for (uint32_t dev = 0; dev < MAX7219_NUM_DEVICES; dev++)
    {
      uint8_t val = 0;
      if (row < 7) /* 글꼴은 7행(0~6)까지만 있음, 8번째 행은 항상 빈 줄 */
      {
        for (uint8_t c = 0; c < 5; c++) /* 글꼴 폭 5, 나머지 3컬럼은 여백(0) */
        {
          uint8_t bit = (glyphs[dev]->rows[row] >> (4 - c)) & 0x01U;
#if MAX7219_MIRROR_COLS
          val |= (uint8_t)(bit << (2 + c));
#else
          val |= (uint8_t)(bit << (7 - c));
#endif
        }
      }
      dev_row[dev] = val;
    }
    max7219_send_row(row, dev_row);
  }
}

'embeded > Cortex-M3 STM' 카테고리의 다른 글

ws2812b vs hub75  (0) 2026.09.23
네오픽셀 ws2812b-64 작동  (0) 2026.09.23
stm32 gpio hi-z  (0) 2026.09.10
stm32f103c9t6(bluepill) + keypad  (0) 2026.09.08
stm32 usb composite / report id  (0) 2026.09.04
Posted by 구차니
embeded/Cortex-M3 STM2026. 9. 23. 12:46

짱구 굴려봐도.. ws2812b가 절대 쌀수가 없네..

라즈베리 파이에 ws2612b-64를 8x8로 구성해서

총 64x64 해상도 출력하는데 드는 돈이 장당 2500원 해도 16만원 (실 구매가는 2200원 이긴 한데)

전원이랑 라즈베리 파이 추가하면 총 가격이 어마어마 해진다.

 

[링크 : https://itempage3.auction.co.kr/DetailView.aspx?itemno=F479040772] HUB75 128x128 13만원

 

 네, 보통 HUB75가 단위면적당 더 쌉니다. 이유는 구조적입니다.

  근본 이유
  - WS2812B: LED 하나당 드라이버 IC가 하나씩 내장(개별 어드레싱) → LED 개수만큼 IC 비용이 그대로 곱해짐
  - HUB75: LED 여러 개(보통 16개)를 드라이버 IC 하나(MBI5124 등)가 묶어서 구동 → IC 개수가 LED 개수의 1/16
    수준이라 원가가 확 낮음
  - 게다가 HUB75는 옥외광고/전광판 산업에서 이미 수백만 장 양산되는 표준품이라 규모의 경제까지 붙음

  대략적인 단가 비교 (픽셀피치 1cm 기준으로 맞춰서)
  - WS2812B 8×8 모듈(8cm×8cm=64cm²): 약 2,500원 → 약 39원/cm²
  - HUB75 P10 판넬(32×16px, 32cm×16cm=512cm²): 알리 기준 대략 10,000~15,000원 → 약 20~29원/cm²

  → 같은 면적, 비슷한 해상도 밀도 기준으로 HUB75가 30~50% 정도 저렴한 편입니다.

  64×64(64cm×64cm) 전체로 환산하면
  - WS2812B: 아까 계산한 16만원
  - HUB75(같은 픽셀피치 P10 기준, 32×32px 판넬 4장 정도 조합): 대략 4~6만원대로 절반 이하까지 내려갈 수 있음

  덤으로 따라오는 이점
  - HUB75 판넬은 애초에 체이닝용 커넥터 + 판넬 내 전원 분배가 설계되어 있어서, 아까 얘기한 "전원 주입 지점 직접
    설계" 부담이 훨씬 줄어듭니다 (완전히 없어지진 않지만 DIY WS2812보다 훨씬 정형화됨)

  대신 치러야 할 비용은 복잡도
  - 드라이버가 HUB75 전용 스캔+BCM 방식이라 소프트웨어를 새로 짜야 함 (지금 있는 WS2812 코드 재사용 불가, 전에
    말씀드린 대로)
  - MCU도 RPi나 ESP32-S3처럼 DMA로 지속 스캔 감당할 수 있는 걸 써야 함

  정리하면 돈은 HUB75가 이기고, 개발 난이도는 WS2812가 더 쉬움 — 트레이드오프입니다. 64개 패널 사기 전에 HUB75
  견적도 한 번 비교해보시는 게 좋을 것 같아요.

'embeded > Cortex-M3 STM' 카테고리의 다른 글

max7219 8-Digit LED Display Drivers  (0) 2026.09.23
네오픽셀 ws2812b-64 작동  (0) 2026.09.23
stm32 gpio hi-z  (0) 2026.09.10
stm32f103c9t6(bluepill) + keypad  (0) 2026.09.08
stm32 usb composite / report id  (0) 2026.09.04
Posted by 구차니
embeded/Cortex-M3 STM2026. 9. 23. 12:08

stm32f103 / bluepill

네오픽셀 ws2812b-64

+ claude

 

PB0 를 신호선으로 GND는 연결해주어야 한다.

white로 하면 최대 밝기가 아니어도 미친듯이 눈이 부시고 4.5V / 1.6A 먹는데

레인보우 패턴으로 바꾸니 4V / 0.15A 정도로 착하게 먹는다.

 

저기가 1번 LED

 

하나 더 켜진게 led 2번

뒤집으면 입력핀 바로 뒤에있는게 1번이다.

 

직접 코딩해보려다가 작동만 확인하려고 ai 써서 일단 진행

낮은 클럭으로 하다가 안되서 72MHz로 올리니 정상적으로 작동한다. 역시 SPI로 가야하나?

/* -------------------- WS2812 (PB0, bit-bang, DWT cycle count) -------------------- */

/* Cortex-M3 DWT 사이클 카운터 활성화 (마이크로초 이하 정밀 타이밍용) */
static void DWT_Init(void)
{
  CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
  DWT->CYCCNT = 0;
  DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk;
}

/* 비트 1개 전송: 기준 시각(start) 대비 상대시간으로 High->Low 구간을 제어해
 * 분기/함수호출 오버헤드로 인한 지터를 최소화한다.
 * always_inline: -O0 빌드에서도 GCC가 반드시 인라인하도록 강제 (그냥 inline은
 * -O0에서 무시되어 매 비트마다 진짜 함수호출(push/pop)이 발생, 비트 사이 LOW
 * 구간이 수십배 길어져 스트립이 매 비트를 리셋으로 오인하는 문제가 있었음). */
__attribute__((always_inline)) static inline void ws2812_send_bit(uint8_t bit)
{
  uint32_t start = DWT->CYCCNT;
  uint32_t high_cycles = bit ? WS_T1H_CYCLES : WS_T0H_CYCLES;

  WS2812_PORT->BSRR = WS2812_PIN;                  /* Data line High */
  while ((DWT->CYCCNT - start) < high_cycles) { }
  WS2812_PORT->BSRR = (uint32_t)WS2812_PIN << 16U;  /* Data line Low  */
  while ((DWT->CYCCNT - start) < WS_BIT_CYCLES) { }
}

__attribute__((always_inline)) static inline void ws2812_send_byte(uint8_t byte)
{
  for (int8_t i = 7; i >= 0; i--)
  {
    ws2812_send_bit((byte >> i) & 0x01U);
  }
}

/* led_grb[] 버퍼 내용을 스트립으로 전송. 전송 중 인터럽트(특히 USB)로 인한
 * 타이밍 흐트러짐을 막기 위해 전송 구간만 짧게(약 1.92ms/64LED) IRQ를 끈다.
 *
 * 전송 전에 예상 총 전류(mA)를 계산해서 WS_MAX_TOTAL_MA를 넘으면 전체 밝기를
 * 비율대로 깎아서 보낸다. led_grb[]는 원본 그대로 두고(다음 프레임 색상 계산에
 * 영향 없음), 실제 출력만 스케일한다. */
static void ws2812_show(void)
{
  uint32_t est_ma = (uint32_t)NUM_LEDS * WS_MA_IDLE_PER_LED;
  for (uint32_t i = 0; i < NUM_LEDS; i++)
  {
    uint32_t sum = (uint32_t)led_grb[i][0] + led_grb[i][1] + led_grb[i][2];
    est_ma += (sum * WS_MA_PER_CH_FULL) / 255U;
  }

  /* scale: 256 = 그대로, 그보다 작으면 그 비율만큼 줄임 (고정소수점 8bit) */
  uint32_t scale = 256U;
  if (est_ma > WS_MAX_TOTAL_MA)
  {
    scale = (WS_MAX_TOTAL_MA * 256U) / est_ma;
  }

  __disable_irq();
  for (uint32_t i = 0; i < NUM_LEDS; i++)
  {
    ws2812_send_byte((uint8_t)((led_grb[i][0] * scale) >> 8)); /* G */
    ws2812_send_byte((uint8_t)((led_grb[i][1] * scale) >> 8)); /* R */
    ws2812_send_byte((uint8_t)((led_grb[i][2] * scale) >> 8)); /* B */
  }
  __enable_irq();
  /* Reset/Latch(>=50us Low)은 다음 프레임까지의 HAL_Delay 구간이 충분히 커버함 */
}

/* 0~255 위치값을 무지개 색상(R,G,B)으로 변환 (Adafruit NeoPixel wheel과 동일) */
static void wheel(uint8_t pos, uint8_t *r, uint8_t *g, uint8_t *b)
{
  pos = 255 - pos;
  if (pos < 85)
  {
    *r = 255 - pos * 3;
    *g = 0;
    *b = pos * 3;
  }
  else if (pos < 170)
  {
    pos -= 85;
    *r = 0;
    *g = pos * 3;
    *b = 255 - pos * 3;
  }
  else
  {
    pos -= 170;
    *r = pos * 3;
    *g = 255 - pos * 3;
    *b = 0;
  }
}

int main(void)
{

  /* USER CODE BEGIN 1 */
uint32_t count = 0;       /* 프레임 카운터 (하트비트 타이밍용) */
uint32_t anim_offset = 0; /* 무지개 애니메이션 오프셋 (WS_ANIM_STEP만큼씩 증가) */
#if WS_TEST_ORIENTATION
    /* 방향 확인용: 1번(index 0) LED만 흰색, 나머지는 꺼둠 */
    for (uint32_t i = 0; i < NUM_LEDS; i++)
    {
      uint8_t v = (i == 0) ? WS_BRIGHTNESS : 0;
      led_grb[i][0] = v; /* G */
      led_grb[i][1] = v; /* R */
      led_grb[i][2] = v; /* B */
    }
    ws2812_show();
#else
    for (uint32_t i = 0; i < NUM_LEDS; i++)
    {
      uint8_t wheel_pos = (uint8_t)((i * 256 / NUM_LEDS + anim_offset) & 0xFF);
      uint8_t r, g, b;
      wheel(wheel_pos, &r, &g, &b);
      led_grb[i][0] = (uint8_t)((g * WS_BRIGHTNESS) / 255);
      led_grb[i][1] = (uint8_t)((r * WS_BRIGHTNESS) / 255);
      led_grb[i][2] = (uint8_t)((b * WS_BRIGHTNESS) / 255);
    }
    ws2812_show();
#endif
}

 

 

'embeded > Cortex-M3 STM' 카테고리의 다른 글

max7219 8-Digit LED Display Drivers  (0) 2026.09.23
ws2812b vs hub75  (0) 2026.09.23
stm32 gpio hi-z  (0) 2026.09.10
stm32f103c9t6(bluepill) + keypad  (0) 2026.09.08
stm32 usb composite / report id  (0) 2026.09.04
Posted by 구차니
embeded/rpi pico2026. 9. 17. 17:50

도대체 먼 끔찍한(?) 걸 만들어서 싸게 파는거야?!?

 

PIO- Programmable IO

[링크 : https://blog.naver.com/chcbaram/222807946312]

[링크 : https://github.com/raspberrypi/pico-examples/tree/master/pio]

 

cortex-m0+ 듀얼 코어라 AMP도 해봐야 하는디.. 언제 해보냐 ㅠㅠ

Posted by 구차니
embeded/Cortex-M3 STM2026. 9. 10. 21:41

흐음...?

일단 gpio 읽을 row high + col read 조합으로 하는데 (풀때는 row low)

col 하나가 눌리면 다른 row에서 해당 col은 읽히지가 않아서 찾아보니

high-z로 가야지 읽을수 있다고 한다. 테스트는 필요함

 

by claude

STM32 HAL에는 "Hi-Z로 쓰기" 함수가 없어서, 핀 모드를 **입력(No Pull)**으로 바꿔야 Hi-Z가 됩니다. 행을 스캔할 때만 출력으로 바꾸고, 끝나면 다시 입력으로 돌리면 됩니다.


static void row_pin_mode(uint16_t pin, uint32_t mode)
{
    GPIO_InitTypeDef init = {0};
    init.Pin   = pin;
    init.Mode  = mode;
    init.Pull  = GPIO_NOPULL;
    init.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(GPIOA, &init);
}



static inline void pin_hiz(GPIO_TypeDef *port, uint16_t pin)
{
    uint32_t pos = __builtin_ctz(pin) * 2U;
    port->MODER &= ~(0x3U << pos);                               // 00: Input (Hi-Z)
}

static inline void pin_output(GPIO_TypeDef *port, uint16_t pin)
{
    uint32_t pos = __builtin_ctz(pin) * 2U;
    port->MODER = (port->MODER & ~(0x3U << pos)) | (0x1U << pos); // 01: Output
}

 

 

by chatgpt

GPIOA->CRL &= ~(0xF << (1 * 4));
GPIOA->CRL |=  (0x4 << (1 * 4));

여기서 0x4는:

MODE = 00  → Input
CNF  = 01  → Floating input

여러 핀을 한꺼번에

예를 들어 PA1, PA2, PA3을 모두 Hi-Z로:

GPIOA->CRL &= ~(
    (0xF << (1 * 4)) |
    (0xF << (2 * 4)) |
    (0xF << (3 * 4))
);

GPIOA->CRL |= (
    (0x4 << (1 * 4)) |
    (0x4 << (2 * 4)) |
    (0x4 << (3 * 4))
);

'embeded > Cortex-M3 STM' 카테고리의 다른 글

ws2812b vs hub75  (0) 2026.09.23
네오픽셀 ws2812b-64 작동  (0) 2026.09.23
stm32f103c9t6(bluepill) + keypad  (0) 2026.09.08
stm32 usb composite / report id  (0) 2026.09.04
로터리 엔코더.. 2?  (0) 2026.08.31
Posted by 구차니
embeded/Cortex-M3 STM2026. 9. 8. 16:22

귀찮으니 오늘도 대충대충

그나저나 고스팅이란걸 겪어보니 참 난해하구만?

 

핀은 아래처럼 구성하고

 

C1~C4는 A0~A3에 연결함 (C1을 LSB로 보게 하기 위해서)

 

코드는 효율적이진 못하지만 일단 대충 이런느낌으로 작성

row를 high / low로 바꾸면서 col을 읽는구조로 해놨고(col - pin 0~3, row - pin 4~7)

#define BUF_SIZE 50
uint8_t usb_buf[BUF_SIZE];
uint32_t count = 0;
#if 1
int prev_val = 0;
void gpio_proc()
{
  int val = 0;
  // row
  // val |= (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_4) << 4);
  // val |= (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_5) << 5);
  // val |= (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_6) << 6);
  // val |= (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_7) << 7);

  char *swname[4][4] = {
    {"S1", "S2", "S3", "S4"},
    {"S5", "S6", "S7", "S8"},
    {"S9", "S10", "S11", "S12"},
    {"S13", "S14", "S15", "S16"}
  };

  for(uint16_t row_idx = 0; row_idx < 4; row_idx ++)
  {
    uint16_t pin_arr[] = {GPIO_PIN_4, GPIO_PIN_5, GPIO_PIN_6, GPIO_PIN_7};
    HAL_GPIO_WritePin(GPIOA, pin_arr[row_idx], GPIO_PIN_SET);
    HAL_Delay(1);

    // column
    val |= (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) << 0);
    val |= (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1) << 1);
    val |= (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_2) << 2);
    val |= (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_3) << 3);

    HAL_GPIO_WritePin(GPIOA, pin_arr[row_idx], GPIO_PIN_RESET);

    int col_idx = 0;
    for(int col_idx = 0; col_idx < 4; col_idx++)
    {
      if((val >> col_idx) & 0x01)
      {
        char *name = swname[row_idx][col_idx];
        sprintf((char*)usb_buf + strlen(usb_buf), "%s ", name);
      }
    }

    val = 0;
  }

  sprintf((char*)usb_buf + strlen(usb_buf), " --- %d %X\r\n", count, val);
  CDC_Transmit_FS(usb_buf, BUF_SIZE);
  memset(usb_buf,0,BUF_SIZE);
  count++;

}
#endif

 

한 행에 누르면 전부 인식되지만 (열은 구분 문제 없음)

 

한 열에 누르면 (S4 + S8 + S12)

해당 라인 자체가 눌리지 않은것으로 나온다. 이래서 다이오드 다는건가?

'embeded > Cortex-M3 STM' 카테고리의 다른 글

네오픽셀 ws2812b-64 작동  (0) 2026.09.23
stm32 gpio hi-z  (0) 2026.09.10
stm32 usb composite / report id  (0) 2026.09.04
로터리 엔코더.. 2?  (0) 2026.08.31
bluepill / 로터리 엔코더 테스트  (0) 2026.08.28
Posted by 구차니
embeded/luckfox2026. 9. 8. 11:54

아래 링크 따라해봄

[링크 : https://wiki.luckfox.com/Luckfox-Pico-Plus-Mini/Flash-image]

 

soc toolkit은 관리자 권한으로 실행해야지 usb disk를 찾는다. 머냐.. 찜찜하게

ubuntu...zip 을 압축 풀고  update.img를 제외하고 전부 선택하면 된다.

 

 

DDR 306b9977f5 wesley.yao 23/12/21-09:28:37,fwver: v1.15
S5P1
4x
fc27
rgef0
rgef1
DDRConf1
DDR2, BW=16 Col=10 Bk=4 CS0 Row=13 CS=1 Size=64MB
528MHz
DDR bin out

U-Boot SPL board init
U-Boot SPL 2017.09 (Jun 26 2025 - 11:26:17)
Trying to boot from MMC2
ENVF: Primary 0x00000000 - 0x00008000
ENVF: Primary 0x00000000 - 0x00008000
No misc partition
Trying fit image at 0x440 sector
## Verified-boot: 0
## Checking uboot 0x00200000 (lzma @0x00400000) ... sha256(155eb2eff5...) + sha256(39851d494f...) + OK
## Checking fdt 0x00260998 ... sha256(9f596c5683...) + OK
Total: 428.120/510.978 ms

Jumping to U-Boot(0x00200000)


U-Boot 2017.09 (Mar 13 2025 - 22:07:02 +0800)

Model: Rockchip RV1106 EVB Board
MPIDR: 0xf00
PreSerial: 2, raw, 0xff4c0000
DRAM:  64 MiB
Sysmem: init
Relocation Offset: 03d81000
Relocation fdt: 02dfa778 - 02dfede0
CR: M/C/I
Using default environment

no mmc device at slot 1
ENVF: Primary 0x00000000 - 0x00008000
ENVF: Primary 0x00000000 - 0x00008000
mmc@ffa90000: 0, mmc@ffaa0000: 1 (SD)
Bootdev(atags): mmc 1
MMC1: Legacy, 52Mhz
PartType: ENV
DM: v2
No misc partition
boot mode: None
RESC: 'boot', blk@0x00001db6
resource: sha256+
FIT: no signed, no conf required
DTB: rk-kernel.dtb
HASH(c): OK
Model: Luckfox Pico Mini
## retrieving sd_update.txt ...
bad MBR sector signature 0x0000
** Invalid partition 1 **
CLK: (uboot. arm: enter 816000 KHz, init 816000 KHz, kernel 0N/A)
  apll 816000 KHz
  dpll 528000 KHz
  gpll 1188000 KHz
  cpll 1000000 KHz
  aclk_peri_root 400000 KHz
  hclK_peri_root 200000 KHz
  pclk_peri_root 100000 KHz
  aclk_bus_root 300000 KHz
  pclk_top_root 100000 KHz
  pclk_pmu_root 100000 KHz
  hclk_pmu_root 200000 KHz
No misc partition
Net:   eth0: ethernet@ffa80000
Hit key to stop autoboot('CTRL+C'):  0 
## Booting FIT Image at 0x290ab40 with size 0x002eec00
Fdt Ramdisk skip relocation
No misc partition
## Loading kernel from FIT Image at 0290ab40 ...
   Using 'conf' configuration
## Verified-boot: 0
   Trying 'kernel' kernel subimage
     Description:  unavailable
     Type:         Kernel Image
     Compression:  uncompressed
     Data Start:   0x02914140
     Data Size:    3036240 Bytes = 2.9 MiB
     Architecture: ARM
     OS:           Linux
     Load Address: 0x00008000
     Entry Point:  0x00008000
     Hash algo:    sha256
     Hash value:   771db266e47561fe03689039c5f37c245966055ca6c4b8626f8bbcb5a287d0c5
   Verifying Hash Integrity ... sha256+ OK
## Loading fdt from FIT Image at 0290ab40 ...
   Using 'conf' configuration
   Trying 'fdt' fdt subimage
     Description:  unavailable
     Type:         Flat Device Tree
     Compression:  uncompressed
     Data Start:   0x0290b340
     Data Size:    36058 Bytes = 35.2 KiB
     Architecture: ARM
     Load Address: 0x00c00000
     Hash algo:    sha256
     Hash value:   ec878326be328d02cf921dd47e26715622d000bcf412e78c8a936ec0f5bb3285
   Verifying Hash Integrity ... sha256+ OK
   Loading fdt from 0x0290ab40 to 0x00c00000
   Booting using the fdt blob at 0x00c00000
   Loading Kernel Image from 0x02914140 to 0x00008000 ... OK
   kernel loaded at 0x00008000, end = 0x002ed450
   Using Device Tree in place at 00c00000, end 00c0bcd9
Adding bank: 0x00000000 - 0x04000000 (size: 0x04000000)
Total: 937.378/1453.452 ms

Starting kernel ...

[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Linux version 5.10.160 (root@DESKTOP-RUMO6US) (arm-rockchip830-linux-uclibcgnueabihf-gcc (crosstool-NG 1.24.0) 8.3.0, GNU ld (crosstool-NG 1.24.05
[    0.000000] CPU: ARMv7 Processor [410fc075] revision 5 (ARMv7), cr=50c53c7d
[    0.000000] CPU: div instructions available: patching division code
[    0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
[    0.000000] OF: fdt: Machine model: Luckfox Pico Mini
[    0.000000] Memory policy: Data cache writeback
[    0.000000] cma: Reserved 1024 KiB at 0x03f00000
[    0.000000] Zone ranges:
[    0.000000]   Normal   [mem 0x0000000000000000-0x0000000003ffffff]
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x0000000000000000-0x0000000003ffffff]
[    0.000000] Initmem setup node 0 [mem 0x0000000000000000-0x0000000003ffffff]
[    0.000000] CPU: All CPU(s) started in SVC mode.
[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 16256
[    0.000000] Kernel command line: user_debug=31 storagemedia=sd androidboot.storagemedia=sd androidboot.mode=normal  rootwait earlycon=uart8250,mmio32,0xff4c05
[    0.000000] Dentry cache hash table entries: 8192 (order: 3, 32768 bytes, linear)
[    0.000000] Inode-cache hash table entries: 4096 (order: 2, 16384 bytes, linear)
[    0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off
[    0.000000] Memory: 57176K/65536K available (3793K kernel code, 379K rwdata, 1816K rodata, 196K init, 138K bss, 7336K reserved, 1024K cma-reserved)
[    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[    0.000000] NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16
[    0.000000] arch_timer: cp15 timer(s) running at 24.00MHz (phys).
[    0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0x588fe9dc0, max_idle_ns: 440795202592 ns
[    0.000006] sched_clock: 56 bits at 24MHz, resolution 41ns, wraps every 4398046511097ns
[    0.000018] Switching to timer-based delay loop, resolution 41ns
[    0.000513] Console: colour dummy device 80x30
[    0.000565] Calibrating delay loop (skipped), value calculated using timer frequency.. 48.00 BogoMIPS (lpj=240000)
[    0.000581] pid_max: default: 4096 minimum: 301
[    0.000758] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
[    0.000772] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
[    0.001422] CPU: Testing write buffer coherency: ok
[    0.002107] Setting up static identity map for 0x81c0 - 0x81f8
[    0.002584] devtmpfs: initialized
[    0.009512] VFP support v0.3: implementor 41 architecture 2 part 30 variant 7 rev 5
[    0.009709] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
[    0.009729] futex hash table entries: 16 (order: -5, 192 bytes, linear)
[    0.009866] pinctrl core: initialized pinctrl subsystem
[    0.011124] NET: Registered protocol family 16
[    0.011568] DMA: failed to allocate 0 KiB pool for atomic coherent allocation
[    0.012163] Registered FIQ tty driver
[    0.012504] thermal_sys: Registered thermal governor 'step_wise'
[    0.012511] thermal_sys: Registered thermal governor 'user_space'
[    0.012752] cpuidle: using governor menu
[    0.026002] rockchip-gpio ff380000.gpio: probed /pinctrl/gpio@ff380000
[    0.026819] rockchip-gpio ff530000.gpio: probed /pinctrl/gpio@ff530000
[    0.027620] rockchip-gpio ff550000.gpio: probed /pinctrl/gpio@ff550000
[    0.028315] rockchip-gpio ff560000.gpio: probed /pinctrl/gpio@ff560000
[    0.028416] rockchip-pinctrl pinctrl: probed pinctrl
[    0.038327] fiq_debugger fiq_debugger.0: IRQ uart_irq not found
[    0.038352] fiq_debugger fiq_debugger.0: IRQ wakeup not found
[    0.038642] printk: console [ttyFIQ0] enabled
[    0.038867] Registered fiq debugger ttyFIQ0
[    0.041050] SCSI subsystem initialized
[    0.041273] usbcore: registered new interface driver usbfs
[    0.041322] usbcore: registered new interface driver hub
[    0.041372] usbcore: registered new device driver usb
[    0.041638] mc: Linux media interface: v0.10
[    0.041677] videodev: Linux video capture interface: v2.00
[    0.042883] Advanced Linux Sound Architecture Driver Initialized.
[    0.043708] rockchip-cpuinfo cpuinfo: SoC            : 11031000
[    0.043735] rockchip-cpuinfo cpuinfo: Serial         : 3c6d8f8ee95e4dd0
[    0.044129] rockchip,rknpor-powergood ff000000.syscon:rknpor-powergood: probe success!
[    0.044968] clocksource: Switched to clocksource arch_sys_counter
[    0.051609] NET: Registered protocol family 2
[    0.051855] IP idents hash table entries: 2048 (order: 2, 16384 bytes, linear)
[    0.052289] tcp_listen_portaddr_hash hash table entries: 512 (order: 0, 4096 bytes, linear)
[    0.052319] TCP established hash table entries: 1024 (order: 0, 4096 bytes, linear)
[    0.052336] TCP bind hash table entries: 1024 (order: 0, 4096 bytes, linear)
[    0.052352] TCP: Hash tables configured (established 1024 bind 1024)
[    0.052467] UDP hash table entries: 256 (order: 0, 4096 bytes, linear)
[    0.052490] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes, linear)
[    0.052630] NET: Registered protocol family 1
[    0.053300] RPC: Registered named UNIX socket transport module.
[    0.053326] RPC: Registered udp transport module.
[    0.053332] RPC: Registered tcp transport module.
[    0.053339] RPC: Registered tcp NFSv4.1 backchannel transport module.
[    0.054444] rockchip-thermal ff3c8000.tsadc: tsadc is probed successfully!
[    0.055591] Initialise system trusted keyrings
[    0.055864] workingset: timestamp_bits=30 max_order=14 bucket_order=0
[    0.059606] squashfs: version 4.0 (2009/01/31) Phillip Lougher
[    0.060492] NFS: Registering the id_resolver key type
[    0.060568] Key type id_resolver registered
[    0.060579] Key type id_legacy registered
[    0.060626] jffs2: version 2.2. (NAND) © 2001-2006 Red Hat, Inc.
[    0.061126] Key type asymmetric registered
[    0.061149] Asymmetric key parser 'x509' registered
[    0.061175] io scheduler mq-deadline registered
[    0.061568] rockchip-usb2phy ff3e0000.usb2-phy: IRQ index 0 not found
[    0.066562] dma-pl330 ff420000.dma-controller: Loaded driver for PL330 DMAC-241330
[    0.066592] dma-pl330 ff420000.dma-controller:       DBUFF-128x8bytes Num_Chans-8 Num_Peri-32 Num_Events-16
[    0.067425] rockchip-pvtm ff240000.pvtm: pvtm@0 probed
[    0.067605] rockchip-pvtm ff390000.pvtm: pvtm@0 probed
[    0.067911] rockchip-system-monitor rockchip-system-monitor: system monitor probe
[    0.068472] Serial: 8250/16550 driver, 6 ports, IRQ sharing disabled
[    0.074189] random: crng init done
[    0.083411] brd: module loaded
[    0.089361] loop: module loaded
[    0.091595] spi-nand spi2.0: Winbond SPI NAND was found.
[    0.091625] spi-nand spi2.0: 128 MiB, block size: 128 KiB, page size: 2048, OOB size: 64
[    0.100923] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[    0.101278] usbcore: registered new interface driver usb-storage
[    0.101472] gadgetfs: USB Gadget filesystem, version 24 Aug 2004
[    0.101527] Mass Storage Function, version: 2009/09/11
[    0.101541] LUN: removable file: (no medium)
[    0.101572] no file given for LUN0
[    0.101608] udc ffb00000.usb: failed to start g_mass_storage: -22
[    0.102147] i2c /dev entries driver
[    0.103735] i2c i2c-4: 1 i2c clients have been registered at 0x30
[    0.104130] i2c i2c-4: 2 i2c clients have been registered at 0x30
[    0.105229] usbcore: registered new interface driver uvcvideo

[    0.105247] USB Video Class driver (1.1.1)
Welcome to Ubuntu 22.04.3 LTS!
[    0.106016] cpu cpu0: leakage=15

[    0.106800] cpu cpu0: avs=0
[    0.106970] cpu cpu0: opp calibration done
[    0.107130] cpu cpu0: l=10000 h=2147483647 hyst=5000 l_limit=0 h_limit=0 h_table=0
[    0.107595] Synopsys Designware Multimedia Card Interface Driver
[    0.108510] dtbocfg: 0.1.0
[    0.108583] dtbocfg: OK
[    0.110069] dwmmc_rockchip ffaa0000.mmc: No normal pinctrl state
[    0.110100] dwmmc_rockchip ffaa0000.mmc: No idle pinctrl state
[    0.110362] dwmmc_rockchip ffaa0000.mmc: IDMAC supports 32-bit address mode.
[    0.110415] dwmmc_rockchip ffaa0000.mmc: Using internal DMA controller.
[    0.110435] dwmmc_rockchip ffaa0000.mmc: Version ID is 270a
[    0.110481] dwmmc_rockchip ffaa0000.mmc: DW MMC controller at irq 48,32 bit host data width,256 deep fifo
[    0.112245] rv1106-acodec ff480000.acodec: current soc_id: rv1103
[    0.112355] rv1106-acodec ff480000.acodec: Use pa_ctl_gpio and pa_ctl_delay_ms: 0
[    0.114188] NET: Registered protocol family 17
[    0.114339] Key type dns_resolver registered
[    0.115458] Loading compiled-in X.509 certificates
[    0.131919] mmc_host mmc1: Bus speed (slot 0) = 400000Hz (slot req 400000Hz, actual 400000HZ div = 0)
[    0.143640] input: adc-keys as /devices/platform/adc-keys/input/input0
[    0.199077] mmc_host mmc1: Bus speed (slot 0) = 49500000Hz (slot req 50000000Hz, actual 49500000HZ div = 0)
[    0.199234] mmc1: new high speed SDHC card at address aaaa
[    0.200185] mmcblk1: mmc1:aaaa SL08G 7.40 GiB 
[    0.201223]  mmcblk1: p1(env) p2(idblock) p3(uboot) p4(boot) p5(oem) p6(userdata) p7(rootfs)
[    0.228638] ALSA device list:
[    0.228673]   #0: rv-acodec
[    0.242141] EXT4-fs (mmcblk1p7): mounted filesystem with ordered data mode. Opts: (null)
[    0.242251] VFS: Mounted root (ext4 filesystem) readonly on device 179:7.
[    0.250194] devtmpfs: mounted
[    0.250425] Freeing unused kernel memory: 196K
[    0.250434] Kernel memory protection not selected by kernel config.
[    0.250467] Run /sbin/init as init process
[    0.736059] systemd[1]: System time before build time, advancing clock.
[    0.753328] systemd[1]: Failed to look up module alias 'autofs4': Function not implemented
[    0.773975] systemd[1]: systemd 249.11-0ubuntu3.11 running in system mode (+PAM +AUDIT +SELINUX +APPARMOR +IMA +SMACK +SECCOMP +GCRYPT +GNUTLS +OPENSSL +ACL )
[    0.774918] systemd[1]: Detected architecture arm.
[    1.903361] systemd[1]: Queued start job for default target Graphical Interface.
[    1.908512] systemd[1]: Created slice Slice /system/getty.
[  OK  ] Created slice Slice /system/getty.
[    1.911295] systemd[1]: Created slice Slice /system/modprobe.
[  OK  ] Created slice Slice /system/modprobe.
[    1.913680] systemd[1]: Created slice Slice /system/serial-getty.
[  OK  ] Created slice Slice /system/serial-getty.
[    1.915458] systemd[1]: Created slice User and Session Slice.
[  OK  ] Created slice User and Session Slice.
[    1.916576] systemd[1]: Started Dispatch Password Requests to Console Directory Watch.
[  OK  ] Started Dispatch Password …ts to Console Directory Watch.
[    1.917599] systemd[1]: Started Forward Password Requests to Wall Directory Watch.
[  OK  ] Started Forward Password R…uests to Wall Directory Watch.
[    1.918557] systemd[1]: Condition check resulted in Arbitrary Executable File Formats File System Automount Point being skipped.
[  OK  ] Reached target Local Encrypted Volumes.
[    1.919104] systemd[1]: Reached target Local Encrypted Volumes.
[  OK  ] Reached target Remote File Systems.
[    1.920227] systemd[1]: Reached target Remote File Systems.
[  OK  ] Reached target Slice Units.
[    1.920820] systemd[1]: Reached target Slice Units.
[  OK  ] Reached target Swaps.
[    1.921465] systemd[1]: Reached target Swaps.
[  OK  ] Reached target Local Verity Protected Volumes.
[    1.922135] systemd[1]: Reached target Local Verity Protected Volumes.
[  OK  ] Listening on Syslog Socket.
[    1.923752] systemd[1]: Listening on Syslog Socket.
[  OK  ] Listening on initctl Compatibility Named Pipe.
[    1.924897] systemd[1]: Listening on initctl Compatibility Named Pipe.
[  OK  ] Listening on Journal Socket (/dev/log).
[    1.948168] systemd[1]: Condition check resulted in Journal Audit Socket being skipped.
[  OK  ] Listening on Journal Socket.
[    1.949378] systemd[1]: Listening on Journal Socket (/dev/log).
[  OK  ] Listening on udev Control Socket.
[    1.951076] systemd[1]: Listening on Journal Socket.
[  OK  ] Listening on udev Kernel Socket.
[    1.953737] systemd[1]: Listening on udev Control Socket.
         Mounting Kernel Debug File System...
[    1.955378] systemd[1]: Listening on udev Kernel Socket.
         Starting Journal Service...
[    1.956719] systemd[1]: Condition check resulted in Huge Pages File System being skipped.
         Starting Load Kernel Module configfs...
[    1.957447] systemd[1]: Condition check resulted in POSIX Message Queue File System being skipped.
         Starting Load Kernel Module drm...
[    1.961599] systemd[1]: Mounting Kernel Debug File System...
         Starting Load Kernel Module efi_pstore...
[    1.962951] systemd[1]: Condition check resulted in Kernel Trace File System being skipped.
         Starting Load Kernel Module fuse...
[    1.966082] systemd[1]: systemd-journald.service: unit configures an IP firewall, but the local system does not support BPF/cgroup firewalling.
         Starting Load Kernel Modules...
[    1.966136] systemd[1]: (This warning is only shown for the first unit using IP firewalling.)
         Starting Remount Root and Kernel File Systems...
[    1.976021] systemd[1]: Starting Journal Service...
         Starting Coldplug All udev Devices...
[    1.986332] systemd[1]: Condition check resulted in Create List of Static Device Nodes being skipped.
[  OK  ] Mounted Kernel Debug File System.
[    2.003514] systemd[1]: Starting Load Kernel Module configfs...
[    2.034590] systemd[1]: Starting Load Kernel Module drm...
[  OK  ] Finished Load Kernel Module configfs.
[    2.065952] systemd[1]: Starting Load Kernel Module efi_pstore...
[    2.092134] systemd[1]: Starting Load Kernel Module fuse...
[    2.127047] systemd[1]: Starting Load Kernel Modules...
[    2.149059] systemd[1]: Starting Remount Root and Kernel File Systems...
[    2.180449] systemd[1]: Starting Coldplug All udev Devices...
[    2.231724] systemd[1]: Mounted Kernel Debug File System.
[    2.242669] systemd[1]: modprobe@configfs.service: Deactivated successfully.
[  OK  ] Finished Load Kernel Module drm.
[    2.255396] systemd[1]: Finished Load Kernel Module configfs.
[    2.306533] systemd[1]: modprobe@drm.service: Deactivated successfully.
[  OK  ] Finished Load Kernel Module efi_pstore.
[    2.307823] systemd[1]: Finished Load Kernel Module drm.
[    2.310247] systemd[1]: modprobe@efi_pstore.service: Deactivated successfully.
[  OK  ] Finished Load Kernel Module fuse.
[    2.323757] systemd[1]: Finished Load Kernel Module efi_pstore.
[  OK  ] Finished Load Kernel Modules.
[    2.331081] systemd[1]: modprobe@fuse.service: Deactivated successfully.
[    2.340210] systemd[1]: Finished Load Kernel Module fuse.
[  OK  ] Finished Remount Root and Kernel File Systems.
[    2.345533] EXT4-fs (mmcblk1p7): re-mounted. Opts: (null)
[    2.351206] systemd[1]: Finished Load Kernel Modules.
[    2.375236] systemd[1]: Finished Remount Root and Kernel File Systems.
         Mounting Kernel Configuration File System...
[    2.377500] systemd[1]: Condition check resulted in FUSE Control File System being skipped.
[    2.395573] systemd[1]: Mounting Kernel Configuration File System...
[    2.405844] systemd[1]: Condition check resulted in Platform Persistent Storage Archival being skipped.
         Starting Load/Save Random Seed...
[    2.423654] systemd[1]: Starting Load/Save Random Seed...
[    2.455953] systemd[1]: Starting Apply Kernel Variables...
         Starting Apply Kernel Variables...
[    2.509363] systemd[1]: Starting Create System Users...
         Starting Create System Users...
[    2.562007] systemd[1]: Mounted Kernel Configuration File System.
[  OK  ] Mounted Kernel Configuration File System.
[    2.611546] systemd[1]: Started Journal Service.
[  OK  ] Started Journal Service.
         Starting Flush Journal to Persistent Storage...
[  OK  ] Finished Coldplug All udev Devices.
         Starting Helper to synchronize boot up for ifupdown...
[  OK  ] Finished Load/Save Random Seed.
[  OK  ] Finished Apply Kernel Variables.
[  OK  ] Finished Helper to synchronize boot up for ifupdown.
[  OK  ] Finished Create System Users.
         Starting Create Static Device Nodes in /dev...
[  OK  ] Finished Flush Journal to Persistent Storage.
[  OK  ] Finished Create Static Device Nodes in /dev.
[  OK  ] Reached target Preparation for Local File Systems.
         Starting Rule-based Manage…for Device Events and Files...
[  OK  ] Started Rule-based Manager for Device Events and Files.
         Starting Load Kernel Module efi_pstore...
         Starting Load Kernel Module fuse...
[  OK  ] Finished Load Kernel Module efi_pstore.
[  OK  ] Found device /dev/ttyFIQ0.
[  OK  ] Finished Load Kernel Module fuse.
[  OK  ] Found device /dev/mmcblk1p6.
[  OK  ] Found device /dev/mmcblk1p5.
[  OK  ] Reached target Hardware activated USB gadget.
         Mounting /oem...
         Mounting /userdata...
[  OK  ] Mounted /oem.
[  OK  ] Mounted /userdata.
[  OK  ] Reached target Local File Systems.
         Starting Raise network interfaces...
         Starting Create Volatile Files and Directories...
[  OK  ] Finished Create Volatile Files and Directories.
         Starting Network Name Resolution...
         Starting Record System Boot/Shutdown in UTMP...
[  OK  ] Finished Record System Boot/Shutdown in UTMP.
[  OK  ] Reached target System Initialization.
[  OK  ] Started ACPI Events Check.
[  OK  ] Started Daily apt download activities.
[  OK  ] Started Daily apt upgrade and clean activities.
[  OK  ] Started Daily dpkg database backup timer.
[  OK  ] Started Periodic ext4 Onli…ata Check for All Filesystems.
[  OK  ] Started Discard unused blocks once a week.
[  OK  ] Started Daily rotation of log files.
[  OK  ] Started Message of the Day.
[  OK  ] Started Daily Cleanup of Temporary Directories.
[  OK  ] Reached target Path Units.
[  OK  ] Reached target Timer Units.
[  OK  ] Listening on ACPID Listen Socket.
[  OK  ] Reached target Socket Units.
[  OK  ] Reached target Basic System.
[  OK  ] Listening on D-Bus System Message Bus Socket.
         Starting Save/Restore Sound Card State...
[  OK  ] Started Regular background program processing daemon.
[  OK  ] Started D-Bus System Message Bus.
         Starting Network Manager...
[  OK  ] Started Save initial kernel messages after boot.
         Starting Remove Stale Onli…t4 Metadata Check Snapshots...
         Starting Dispatcher daemon for systemd-networkd...
         Starting Authorization Manager...
         Starting System Logging Service...
         Starting User Login Management...
         Starting WPA supplicant...
[  OK  ] Finished Raise network interfaces.
[  OK  ] Finished Save/Restore Sound Card State.
[  OK  ] Reached target Sound Card.
[  OK  ] Started System Logging Service.
[  OK  ] Started WPA supplicant.
[  OK  ] Started Authorization Manager.
         Starting Modem Manager...
[  OK  ] Started User Login Management.
[  OK  ] Started Network Manager.
[  OK  ] Started Network Name Resolution.
[  OK  ] Reached target Network.
[  OK  ] Reached target Host and Network Name Lookups.
         Starting Network Time Service...
         Starting /etc/rc.local Compatibility...
         Starting OpenBSD Secure Shell server...
         Starting Permit User Sessions...
         Starting vsftpd FTP server...
[  OK  ] Started vsftpd FTP server.
[  OK  ] Finished Permit User Sessions.
         Starting Hostname Service...
[  OK  ] Started Network Time Service.
[   14.188232] sc3336 4-0030: could not get default pinstate
[   14.188264] sc3336 4-0030: could not get sleep pinstate
[   15.104003] rkcif rkcif-mipi-lvds: failed to get dphy hw node
[   15.104056] : terminal subdev does not exist
[   15.104069] : terminal subdev does not exist
[   15.104077] : terminal subdev does not exist
[   15.104086] : terminal subdev does not exist
[   15.104097] : get_remote_sensor: video pad[0] is null
[   15.104108] : rkcif_update_sensor_info: stream[0] get remote sensor_sd failed!
[   15.104126] : get_remote_sensor: video pad[0] is null
[   15.104134] : rkcif_update_sensor_info: stream[0] get remote sensor_sd failed!
[   15.104149] : get_remote_sensor: video pad[0] is null
[   15.104156] : rkcif_update_sensor_info: stream[0] get remote sensor_sd failed!
[   15.104170] : get_remote_sensor: video pad[0] is null
[   15.104177] : rkcif_update_sensor_info: stream[0] get remote sensor_sd failed!
[   15.197383] rockchip-mipi-csi2: Async registered subdev
[   17.359228] rc.local[275]: 0
[   17.563134] mpp_vepu_pp ffa60000.rkvenc-pp: shared_rst_a_pp is not found!
[   17.563165] vepu_pp_init:526: No aclk reset resource define
[   17.563177] mpp_vepu_pp ffa60000.rkvenc-pp: shared_rst_h_pp is not found!
[   17.563185] vepu_pp_init:529: No hclk reset resource define
[   17.703716] RKNPU ff660000.npu: dev_pm_opp_set_regulators: no regulator (rknpu) found: -19
[   17.760752] rc.local[288]: Input      rkcif-mipi-lvds Format:SBGGR10_1X10 Size:2304x1296@30fps Offset(0,0)
[   24.032674] rc.local[356]: cat: '/sys/bus/sdio/devices/*/uevent': No such file or directory
[   24.084765] rc.local[358]: cat: '/sys/bus/sdio/devices/*/uevent': No such file or directory
[   24.120213] rc.local[360]: cat: '/sys/bus/sdio/devices/*/uevent': No such file or directory
[   24.146917] rc.local[362]: cat: '/sys/bus/sdio/devices/*/uevent': No such file or directory
[   24.174028] rc.local[364]: cat: '/sys/bus/usb/devices/*/uevent': No such file or directory
[   24.207367] rc.local[366]: cat: '/sys/bus/usb/devices/*/uevent': No such file or directory
[   24.232187] rc.local[368]: cat: '/sys/bus/usb/devices/*/uevent': No such file or directory
[   24.267132] rc.local[370]: cat: '/sys/bus/sdio/devices/*/uevent': No such file or directory
[   25.268919] rc.local[350]: wlan0 not found. Stop run rkwifi_server.
[   25.354028] rc.local[384]: resize2fs 1.46.5 (30-Dec-2021)
[   26.336900] rc.local[384]: Filesystem at /dev/mmcblk1p5 is mounted on /oem; on-line resizing required
[   26.338154] rc.local[384]: old_desc_blocks = 1, new_desc_blocks = 1
[   26.339087] rc.local[384]: The filesystem on /dev/mmcblk1p5 is now 131072 (4k) blocks long.
[   26.654170] rc.local[395]: resize2fs 1.46.5 (30-Dec-2021)
[   31.106295] rc.local[395]: Filesystem at /dev/mmcblk1p6 is mounted on /userdata; on-line resizing required
[   31.110425] rc.local[395]: old_desc_blocks = 1, new_desc_blocks = 1
[   31.118636] rc.local[395]: The filesystem on /dev/mmcblk1p6 is now 262144 (1k) blocks long.
[   31.269909] rc.local[404]: resize2fs 1.46.5 (30-Dec-2021)
[   36.048860] rc.local[404]: Filesystem at /dev/mmcblk1p7 is mounted on /; on-line resizing required
[   36.074125] rc.local[404]: old_desc_blocks = 1, new_desc_blocks = 1
[   36.075627] rc.local[404]: The filesystem on /dev/mmcblk1p7 is now 1572864 (4k) blocks long.
[   36.826968] rc.local[352]: Filesystem resized successfully.
[   38.315487] rc.local[352]: Swap successfully.
[   38.649020] rc.local[189]: /etc/rc.local: line 24: warning: command substitution: ignored null byte in input
[   38.701204] rc.local[473]: Debug: configfs_init
[   50.244421] rc.local[520]: /usr/bin/luckfox-config: line 234: warning: command substitution: ignored null byte in input
[   52.294743] rc.local[520]: Only Luckfox Pico Ultra /Luckfox Pico Ultra W support RGB
[   53.907365] rc.local[520]: Complete configuration loading
[   53.976024] rc.local[775]: hwclock: Cannot access the Hardware Clock via any known method.
[   53.979581] rc.local[775]: hwclock: Use the --verbose option to see the details of our search for an access method.

Ubuntu 22.04.3 LTS luckfox ttyFIQ0

[username:password] root:root pico:luckfox

luckfox login: root
Password: 


                                ====               ====
                              ========           ========
                              ===========     ===========
                              ====  ===============  ====
                              ====     =========     ====
                              ====                   ====
                             =                           =
                              ============    ============
                            ================================
                          ======      ==========      =======
                          =====         =======          =====
                          ==========      ===     ===========
                            ============        ============
                                  =======      ======
                                    ======    =====
                                      ============
                                        ========
                                          ====


  ===        ===    ===     =======    ===    ===  =========      ======    ===       ===
  ===        ===    ===   ===     ===  ===  ===    ===         ===      ===   ===   ===
  ===        ===    ===  ===           ======      ===        ===        ===    =====
  ===        ===    ===  ===           ======      =========  ===        ===    =====
  ===        ===    ===   ===     ===  ===  ===    ===         ===      ===   ===   ===
  =========    ======       =======    ===    ===  ===            ======    ===       ===


Welcome to Ubuntu 22.04.3 LTS (GNU/Linux 5.10.160 armv7l)

 * Documentation:  https://wiki.luckfox.com
 * Management:     https://www.luckfox.com

This system has been minimized by removing packages and content that are
not required on a system that users do not log into.

To restore this content, you can run the 'unminimize' command.

The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

root@luckfox:~# 

root@luckfox:~# ifconfig
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 190  bytes 14100 (14.1 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 190  bytes 14100 (14.1 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

usb0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.32.0.70  netmask 255.255.0.0  broadcast 172.32.255.255
        ether 3a:91:cb:ae:12:82  txqueuelen 1000  (Ethernet)
        RX packets 83  bytes 14315 (14.3 KB)
        RX errors 0  dropped 63  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

root@luckfox:~# netstat -tnlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:5037          0.0.0.0:*               LISTEN      499/adbd            
tcp        0      0 0.0.0.0:5555            0.0.0.0:*               LISTEN      499/adbd            
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      128/systemd-resolve 
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      215/sshd: /usr/sbin 

root@luckfox:~# free -h
               total        used        free      shared  buff/cache   available
Mem:            56Mi        23Mi       4.0Mi       0.0Ki        27Mi        27Mi
Swap:          1.0Gi        16Mi       1.0Gi

root@luckfox:~# lsmod
Module                  Size  Used by
rve                    23436  0
rockit                225880  0
rknpu                  27019  0
mpp_vcodec            414257  1 rockit
rga3                   90762  1 rockit
phy_rockchip_csi2_dphy     9338  0
phy_rockchip_csi2_dphy_hw    10066  0
video_rkisp           171838  1 rockit
video_rkcif           162117  1 rockit
sc3336                  9940  1
rk_dvbm                 5941  2 mpp_vcodec,video_rkisp

root@luckfox:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root       5.9G  1.9G  3.8G  34% /
tmpfs            29M     0   29M   0% /dev/shm
tmpfs            12M  988K   11M   9% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
/dev/mmcblk1p5  488M   91M  375M  20% /oem
/dev/mmcblk1p6  238M   15K  233M   1% /userdata
tmpfs           5.7M     0  5.7M   0% /run/user/0

'embeded > luckfox' 카테고리의 다른 글

luckfox pico plus update on linux  (0) 2026.09.08
luckfox pico plus  (0) 2026.09.07
luckfox pico ultra - rknn 예제  (0) 2026.04.27
luckfox pico ultra 카메라 모션 디텍트 끄기  (0) 2026.04.27
luckfox pico ultra - rv1106 riscv  (0) 2026.04.24
Posted by 구차니