'잡동사니'에 해당되는 글 13031건

  1. 2023.09.05 흐음.. 방문자 수가..
  2. 2023.09.05 ordroid c2 - mrs 명령어 고찰
  3. 2023.09.04 linux cooked capture
  4. 2023.09.04 tcpdump
  5. 2023.09.03 피곤
  6. 2023.09.02 조금 늦은 기사기사
  7. 2023.09.02 html video 재생종료 event
  8. 2023.09.01 mpirun illegal instruction
  9. 2023.09.01 dhcpd IP 할당 규칙
  10. 2023.09.01 eos m 수리 부품...

한참때는 1300까지 가더니

아직 대학생들이 개학을 안해서 그런가 미적지근(?) 하다 

게을러져서 2~3주에 한번 글 정리해서 공개하고 하다보니

매일 1개는 쓰더라도 공개주기가 늦어져서 그런건가 싶기도 하고.

 

Posted by 구차니
embeded/odroid2023. 9. 5. 11:08

라즈베리 파이 3b

$ cat /proc/cpuinfo 
processor : 0
BogoMIPS : 38.40
Features : fp asimd evtstrm crc32 cpuid
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part : 0xd03
CPU revision : 4

 

odroid-c2

$ cat /proc/cpuinfo 
processor : 0
BogoMIPS : 2.00
Features : fp asimd crc32
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part : 0xd03
CPU revision : 4

 

소스코드

#include <stdint.h>
#include "timer.h"

void main()
{
opal_sys_timer_freq();
}
#ifndef OPAL_SYS_ARCH_TIMER_H
#define OPAL_SYS_ARCH_TIMER_H 1

#include <sys/times.h>

typedef uint64_t opal_timer_t;

static inline opal_timer_t
opal_sys_timer_get_cycles(void)
{
    opal_timer_t ret;

    __asm__ __volatile__ ("isb" ::: "memory");
    __asm__ __volatile__ ("mrs %0,  CNTVCT_EL0" : "=r" (ret));

    return ret;
}


static inline opal_timer_t
opal_sys_timer_freq(void)
{
    opal_timer_t freq;
    __asm__ __volatile__ ("mrs %0,  CNTFRQ_EL0" : "=r" (freq));
    return (opal_timer_t)(freq);
}

#define OPAL_HAVE_SYS_TIMER_GET_CYCLES 1

#endif /* ! OPAL_SYS_ARCH_TIMER_H */

 

실행파일 디스어셈블

0000000000000724 <opal_sys_timer_freq>:
 724: d10043ff  sub sp, sp, #0x10
 728: d53be000  mrs x0, cntfrq_el0
 72c: f90007e0  str x0, [sp, #8]
 730: f94007e0  ldr x0, [sp, #8]
 734: 910043ff  add sp, sp, #0x10
 738: d65f03c0  ret

 

라즈베리 파이(좌), odroid-c2(우)

(gdb) r
Starting program: /home/pi/src/a.out 
[Inferior 1 (process 2762) exited normally]


(gdb) r
Starting program: /root/src/a.out 

Program received signal SIGILL, Illegal instruction.
0x0000005555555720 in opal_sys_timer_freq ()

 

MRS
Move the contents of the CPSR or SPSR to a general-purpose register.

Usage
Use MRS in combination with MSR as part of a read-modify-write sequence for updating a PSR, for example to change processor mode, or to clear the Q flag.

Caution
You must not attempt to access the SPSR when the processor is in User or System mode. This is your responsibility. The assembler cannot warn you about this as it does not know what processor mode code will be executed in.

Architectures
This instruction is available in ARM architecture versions 3 and above.

[링크 : https://developer.arm.com/documentation/dui0068/b/ARM-Instruction-Reference/Miscellaneous-ARM-instructions/MRS]

 

MSR
Load specified fields of the CPSR or SPSR with an immediate constant, or from the contents of a general-purpose register.

Architectures
This instruction is available in ARM architecture versions 3 and above.

[링크 : https://developer.arm.com/documentation/dui0068/b/ARM-Instruction-Reference/Miscellaneous-ARM-instructions/MSR]

 

 

[링크 :https://developer.arm.com/documentation/ddi0601/2022-03/AArch64-Registers/CNTFRQ-EL0--Counter-timer-Frequency-register]

 

 

Saved Process Status Register

[링크 : https://developer.arm.com/documentation/den0024/a/ARMv8-Registers/AArch64-special-registers/Saved-Process-Status-Register]

 

AArch64 (ARM64)에서는 ARMv7의 CPSR (Current Program Status Register)과 directly 연결되는 개념을 갖고 있지 않다. 그 대신 AArch64에서는 CPSR field의 각 값을 PSTATE로 정의하였다.

[링크 : https://gongpd.tistory.com/9]

 

EL이라는 것에 따라서 PSR 접근이 달라지는 거라면.. 명령어도 illegal이 될 수 있으려나?

[링크 : https://developer.arm.com/documentation/den0024/a/ARMv8-Registers/AArch64-special-registers]

 

EL0 = ARMv7의 User 모드
EL1 = ARMv7의 Supervisor 모드(커널 코드 실행)
EL2 = 하이퍼바이저 모드(하이퍼바이저 실행)
EL3 = Secure 모드(트러스트 존 실행)

[링크 : https://blog.naver.com/crushhh/222093330435]

 

분위기를 보아하니.. cpu ring level(privilige mode) 에 따라서 접근 가능한 레지스터가 바뀌는데

그러면서 특정 명령어가 사용불능이 되기도 하는건가 싶은데

 

라즈베리 파이 3b / 64 odroid c2
$ uname -a
Linux raspberrypi 6.1.21-v8+ #1642 SMP PREEMPT Mon Apr  3 17:24:16 BST 2023 aarch64 GNU/Linux
# uname -a
Linux odroid 3.16.85-65 #1 SMP PREEMPT Mon Jan 18 13:32:38 UTC 2021 aarch64 aarch64 aarch64 GNU/Linux

 

설마 커널 버전에 따른 atf 혹은 el 설정방법 차이나 누락으로 인해 이런 문제가 발생하는건가?

 

시간나면 odroid-c2용 armbian 으로 시도해봐야겠다. 커널 버전이 너무 차이나네..

Armbian 23.8 Bookworm
Kernel 6.1, Size: 467Mb, Release date: Aug 31, 2023

[링크 : https://www.armbian.com/odroid-c2/]

 

+

걍 armbian 하니 잘 된다. 커널 버전이나 aarch64 지원이 미흡한 구버전 커널이라 그럴수도 있을 듯 하다.

minimonk@odroidc2:~$ mpirun
--------------------------------------------------------------------------
mpirun could not find anything to do.

It is possible that you forgot to specify how many processes to run
via the "-np" argument.
--------------------------------------------------------------------------

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

wayland on odroid-c2  (0) 2021.11.22
odroid c2 gpio 와 wiringpi  (0) 2021.09.29
g_mass_storage rpi - odroid c2  (0) 2021.09.28
g_mass_storage ins/rm 실패  (0) 2021.09.28
odroid c2 ubuntu 18.04, 20.04 kernel 버전 정보  (0) 2021.09.27
Posted by 구차니

wireshark 에서 any 인터페이스로 잡으면 

linux cooked capture 라는 희한한(?) 레이어가 생긴다.

물론 wlo나 eth 와 같이 인터페이스를 지정하면 Ethernet II 이런식으로 뜬다.

 

[링크 : https://byeo.tistory.com/entry/Linux-Cooked-Capture-SLL-protocol]

Posted by 구차니
Linux2023. 9. 4. 10:14

원인불명(?)으로 랜이 엄청나게 깜박여서 확인겸

어떤 소켓이나 어떤 포트로 요청이 들어오나 찾는법을 검색해보는데

tcpdump를 실행하면 된다고 해서 깔아봄

 

2995 packets captured
3250 packets received by filter
239 packets dropped by kernel

[링크 : https://stackoverflow.com/questions/21937162/how-to-find-out-the-number-of-transmitted-received-bytes-for-a-socket]

 

-n 줘서 resolve 안하면 drop이 줄어든다는데

도대체 머가 drop 되는진 어떻게 알 수 있을까?

[링크 : http://www.packetinside.com/2010/11/커널에서-drop-되는-패킷-수가-많다면.html]

'Linux' 카테고리의 다른 글

multitail / tail  (2) 2023.10.18
top 로그로 남기기  (0) 2023.10.17
dhcpd IP 할당 규칙  (0) 2023.09.01
시스템 audit 로그  (0) 2023.08.30
.bashrc 설정 history  (0) 2023.08.08
Posted by 구차니

으아아아아아 어깨 아파

어깨에서 곰들이 춤을 추고 있어!

'개소리 왈왈 > 육아관련 주저리' 카테고리의 다른 글

어지러워  (0) 2023.09.08
배탈, 몸살, 피곤  (0) 2023.09.06
뚝섬 유원지 물놀이  (0) 2023.08.19
처갓댁 방문  (0) 2023.08.13
낮잠을 잘 수가 없네!!!  (0) 2023.08.12
Posted by 구차니

거꾸로 두 번 타는 보일러도 아니고 -_-

 

“택시 기본요금 1000원 아닌가요”…국무총리 답변 ‘실소’

[링크 : https://v.daum.net/v/20230831103504070]

 

박지원 "차라리 대통령을 김건희가 했으면 더 잘할 것"

[링크 : https://v.daum.net/v/20230831192203722]

 

尹 국정지지율 5%P 떨어져 33%··· 70% "후쿠시마 오염수 해로울것"

[링크 : https://v.daum.net/v/20230831140144198]

 

'개소리 왈왈 > 정치관련 신세한탄' 카테고리의 다른 글

이재명 대표 피습  (0) 2024.01.02
12.12 쿠데타  (2) 2023.12.12
에라이  (0) 2023.07.12
도둑놈 심뽀?  (0) 2023.06.15
미사일 발사관련 새벽 재난문자  (0) 2023.05.31
Posted by 구차니

video 태그에서 비디오 재생 종료시, onended 이벤트가 발생한다고 한다.

대충(?) 이걸 이용해서 video tag에 재생목록 기능이 없으니, 순차적으로 다른 파일을 재생은 가능한 듯.

 

let aud = document.getElementById("myAudio");
aud.onended = function() {
    alert("The audio has ended");
};

[링크 : https://www.w3schools.com/tags/av_event_ended.asp]

[링크 : https://www.w3schools.com/tags/ref_av_dom.asp]

 

'Programming > javascript & HTML' 카테고리의 다른 글

javascript 숫자  (0) 2024.02.07
마우스로 테이블 열 변경하기  (0) 2024.02.02
숫자에 콤마 찍기(자릿수 표현)  (0) 2023.07.27
canvas 없는 getcontext  (0) 2023.07.12
html canvas와 시간 그래프 흘리기  (0) 2023.07.06
Posted by 구차니

엥... 

라즈베리 파이 3B 64bit OS 에서는 잘 실행되는데

pi@raspberrypi:~ $ mpirun
--------------------------------------------------------------------------
mpirun could not find anything to do.

It is possible that you forgot to specify how many processes to run
via the "-np" argument.
--------------------------------------------------------------------------

pi@raspberrypi:~ $ mpirun --version
mpirun (Open MPI) 4.1.0

Report bugs to http://www.open-mpi.org/community/help/

 

odroid c2 에서는(aarch64) 에러가 난다

$ mpirun
Illegal instruction

$ mpirun --help
Illegal instruction

$ mpirun --version
mpirun (Open MPI) 4.0.3

Report bugs to http://www.open-mpi.org/community/help/

 

strace라던가 써서 추적해보려는데 패키지가 되먹질 않으니 짜증나네 -_ㅠ

 

odroid c2

geteuid()                               = 1000
openat(AT_FDCWD, "/proc/cpuinfo", O_RDONLY) = 3
--- SIGILL {si_signo=SIGILL, si_code=ILL_ILLOPC, si_addr=0x7fa18b7cfc} ---
+++ killed by SIGILL +++
Illegal instruction

 

라즈베리 파이

geteuid()                               = 1000
openat(AT_FDCWD, "/proc/cpuinfo", O_RDONLY) = 3
close(3)                                = 0
getuid()                                = 1000
geteuid()                               = 1000

 

도대체 고작 /proc/cpuinfo 여는걸로 죽다니 머지?

 

+

gdb로 해보니 뜬금없이 libopen-pal.so.40 에서 죽는다. 도대체 PAL 이 멀하는데 illegal instruction 을 띄울 작업을 하는거지?

$ gdb mpirun
GNU gdb (Ubuntu 9.2-0ubuntu1~20.04.1) 9.2
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "aarch64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from mpirun...
(No debugging symbols found in mpirun)
(gdb) r
Starting program: /usr/bin/mpirun 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/aarch64-linux-gnu/libthread_db.so.1".

Program received signal SIGILL, Illegal instruction.
0x0000007fb7ec5cfc in ?? () from /usr/lib/aarch64-linux-gnu/libopen-pal.so.40

 

눈이 이상해졌나 open-pam 인 줄.. -_-

아무튼 libopen-pal 혹은 OPAL  이라는 녀석이 현재 문제인데

openmpi는 liboshmem(shared memory 관리?) libmpi 그리고 libopen-pal로 구성된다고 한다.

That is, they are compiled into separate libraries: liboshmem, libmpi, libopen-pal with a strict dependency order: OSHMEM depends on OMPI, OMPI depends on OPAL.

[링크:  https://docs.open-mpi.org/en/v5.0.x/developers/terminology.html]

 

open PAL은 체크포인트 와 프로그램 재시작을 할 수 있도록 해주는 녀석이니..

프로세서에 대해서 잘 알아야 프로그램을 멈추고 실행하게 할테니..

반대로 생각하면 odroid-c2에서 적용된 aarch64 버전이 amlogic 기반의 ap와는 맞지 않게 빌드된걸려나?

Open PAL can involuntarily checkpoint and restart sequential programs. Doing so requires that Open PAL was compiled with thread support and that the back-end checkpointing systems are available at run-time.

[링크 : https://www.open-mpi.org/doc/v4.1/man7/opal_crs.7.php]

 

+

odroid c2 에서 make -j4 로 openmpi-4.1.0 빌드에 걸린시간

중간에 gdb 설치한다고 순수하게 돌리면 24분쯤으로 되지 않았을까?

real 25m20.199s
user 52m9.680s
sys 5m27.920s

 

 

+

빡세게(?) 빌드까지 해서 겨우겨우 돌렸는데 왜 저런 에러가 또 나냐고 ㅠㅠ

Program received signal SIGILL, Illegal instruction.
0x0000007fb7ec236c in opal_timer_linux_find_freq ()
   from /usr/local/lib/libopen-pal.so.40

 

에러를 보니 먼가 함수명이 나와서 추적

$ grep -rn "opal_timer_linux_find_freq" .
Binary file ./opal/mca/timer/linux/.libs/timer_linux_component.o matches
Binary file ./opal/mca/timer/linux/.libs/libmca_timer_linux.a matches
./opal/mca/timer/linux/timer_linux_component.c:105:static int opal_timer_linux_find_freq(void)
./opal/mca/timer/linux/timer_linux_component.c:203:    ret = opal_timer_linux_find_freq();

$ cat opal/mca/timer/linux/timer_linux_component.c
static int opal_timer_linux_find_freq(void)
{
    FILE *fp;
    char *loc;
    float cpu_f;
    int ret;
    char buf[1024];

    fp = fopen("/proc/cpuinfo", "r");
    if (NULL == fp) {
        return OPAL_ERR_IN_ERRNO;
    }

    opal_timer_linux_freq = 0;

#if OPAL_ASSEMBLY_ARCH == OPAL_ARM64
        opal_timer_linux_freq = opal_sys_timer_freq();
#endif


$ grep -rni "opal_sys_timer_freq" .
./mca/timer/linux/timer_linux_component.c:121: opal_timer_linux_freq = opal_sys_timer_freq();
./include/opal/sys/arm64/timer.h:36:opal_sys_timer_freq(void)

$ cat openmpi-4.1.0/opal/include/opal/sys/arm64/timer.h
static inline opal_timer_t
opal_sys_timer_freq(void)
{
    opal_timer_t freq;
    __asm__ __volatile__ ("mrs %0,  CNTFRQ_EL0" : "=r" (freq));
    return (opal_timer_t)(freq);
}

 

레지스터 이름부터가 무시무시하네?

MRS
Move System Register.

Syntax
MRS Xt, (systemreg|Sop0_op1_Cn_Cm_op2)

Where:

Xt
Is the 64-bit name of the general-purpose destination register.
systemreg
Is a System register name.

The System register names are defined in 'AArch64 System Registers' in the System Register XML.

op0
Is an unsigned immediate, and can be either 2 or 3.
op1
Is a 3-bit unsigned immediate, in the range 0 to 7.
Cn
Is a name Cn, with n in the range 0 to 15.
Cm
Is a name Cm, with m in the range 0 to 15.
op2
Is a 3-bit unsigned immediate, in the range 0 to 7.
Usage
Move System Register allows the PE to read an AArch64 System register into a general-purpose register.

[링크 : https://developer.arm.com/documentation/dui0801/h/A64-General-Instructions/MRS]

 

Accessing CNTFRQ_EL0
Accesses to this register use the following encodings in the System register encoding space:

MRS <Xt>, CNTFRQ_EL0
op0

[링크 : https://developer.arm.com/documentation/ddi0601/2022-03/AArch64-Registers/CNTFRQ-EL0--Counter-timer-Frequency-register]

 

The two instructions you show above are therefore -

MSR HPFAR_EL2, X0

MSR PSTATEField_SP, #0

[링크 : https://reverseengineering.stackexchange.com/questions/14617/arm-understanding-msr-mrs-instructions]

 

보면.. uboot에도 있는 아주 평범한(?) 녀석인데.. 머지?

unsigned long timer_read_counter(void)
{
unsigned long cntpct;
unsigned long temp;

isb();
asm volatile("mrs %0, cntpct_el0" : "=r" (cntpct));
asm volatile("mrs %0, cntpct_el0" : "=r" (temp));
while (temp != cntpct) {
asm volatile("mrs %0, cntpct_el0" : "=r" (cntpct));
asm volatile("mrs %0, cntpct_el0" : "=r" (temp));
}

return cntpct;
}

[링크 : https://github.com/qemu/u-boot/blob/master/arch/arm/cpu/armv8/generic_timer.c]

 

%0은 이전의 dst 를 의미하는걸려나?

int val = 50;
__asm volatile ("MOV R0, %0":  : "r"(var) );

==> (컴파일러 해석) 

ldr r3, [r7, #4]

mov r0, r3

[링크 : https://dhpark1212.tistory.com/entry/ARM-GCC-Inline-assembly-coding]

 

amlogic 의 Cortex-A53인데 많이 다른가?

ODROID-C2 ODROID-C1+ RPi 3 Model B
CPU
Amlogic S905 SoC
4 x ARM Cortex-A53 1.5GHz
64bit ARMv8 Architecture @28nm
Amlogic S805 SoC
4 x ARM Cortex-A5 1.5GHz
32bit ARMv7 Architecture @28nm
Broadcom BCM2837
4 x ARM Cortex-A53 1.2Ghz
64bit ARMv7 Architecture @40nm

[링크 : https://www.hardkernel.com/ko/shop/odroid-c2/]

'프로그램 사용 > openFOAM' 카테고리의 다른 글

openFOAM + freecad + salome  (0) 2023.06.07
openFOAM tutorial with youtube  (0) 2023.05.24
openfoam on ubuntu  (0) 2023.05.24
openFOAM tutorial  (4) 2023.05.24
openfoam7 on ubuntu 18.04  (0) 2020.08.09
Posted by 구차니
Linux2023. 9. 1. 15:39

mac의 oui에 따라서 ip 대역을 다르게 할당하는 방법인.. 듯?

class "kvm" {
   match if binary-to-ascii(16,8,":",substring(hardware, 1, 2)) = "56:11";
}

class "local" {
   match if binary-to-ascii(16,8,":",substring(hardware, 1, 2)) = "52:54";
}

host meme {
 fixed-address 10.1.0.254;
}

host server247 {
  hardware ethernet 52:54:00:2f:ea:07;
  fixed-address 10.1.0.247;
}

subnet 10.1.0.224 netmask 255.255.255.224 {
  option routers 10.1.0.225;
  pool {
     allow members of "kvm";
     range 10.1.0.226 10.1.0.235;
  }
  pool {
     allow members of "local";
     range 10.1.0.236 10.1.0.240;
  }
  pool {
     # Don't use this pool. It is really just a range to reserve
     # for fixed addresses defined per host, above.
     allow known-clients;
     range 10.1.0.241 10.1.0.253;
  }
}

[링크 : https://serverfault.com/questions/79748/assign-dhcp-ips-for-specific-mac-prefixes]

 

예 14.3. DHCP를 사용하여 고정 IP 주소

host apex {
   option host-name "apex.example.com";
   hardware ethernet 00:A0:78:8E:9E:AA;
   fixed-address 192.168.1.4;
}

 

예 14.6. “그룹 선언” 에서 시연한 대로 그룹 선언은 선언 그룹에 전역 매개 변수를 적용하는 데 사용됩니다. 예를 들어 공유 네트워크, 서브넷 및 호스트를 그룹화할 수 있습니다.
예 14.6. 그룹 선언

group {
   option routers                  192.168.1.254;
   option subnet-mask              255.255.255.0;
   option domain-search              "example.com";
   option domain-name-servers       192.168.1.1;
   option time-offset              -18000;     # Eastern Standard Time
   host apex {
      option host-name "apex.example.com";
      hardware ethernet 00:A0:78:8E:9E:AA;
      fixed-address 192.168.1.4;
   }
   host raleigh {
      option host-name "raleigh.example.com";
      hardware ethernet 00:A1:DD:74:C3:F2;
      fixed-address 192.168.1.6;
   }
}

[링크 : https://access.redhat.com/documentation/ko-kr/red_hat_enterprise_linux/7/html/networking_guide/sec-dhcp-configuring-server]

'Linux' 카테고리의 다른 글

top 로그로 남기기  (0) 2023.10.17
tcpdump  (0) 2023.09.04
시스템 audit 로그  (0) 2023.08.30
.bashrc 설정 history  (0) 2023.08.08
lvmcache bcache  (0) 2023.07.27
Posted by 구차니

갑자기 Q / SET 버튼이 안눌려서 어제는 터치로 어떻게 커버했는데

이전에도 회전 버튼도 이상해서 수리해볼까 하다가 검색해보니 부품만 판다고

특이하게(?) FPCB 단판으로 되어있다. 분해해서 닦으면 좀 나아지려나?

 

[링크 : https://blog.naver.com/cottonface/221988000370]

 

[링크 : https://ko.aliexpress.com/item/33042077406.html] 3316원 1.0 평점

[링크 : https://ko.aliexpress.com/item/1005003221582492.html] 4377원 4.0 평점

 

+

AS 센터 전화해보니 ARS 단계만 드럽게 많네 -_-

EOS M은 수리 종료된 제품이라 택배비/점검비 발생가능하지만 수리 못할 수도 있다는 슬픈 소식.

'개소리 왈왈 > 사진과 수다' 카테고리의 다른 글

캐논 br-e1  (0) 2023.12.25
아부지 카메라 강탈!  (0) 2023.11.23
슈퍼~~~문  (0) 2023.08.31
북두칠성, 오리온 그리고 불꽃놀이  (2) 2022.02.03
가을비  (0) 2021.10.31
Posted by 구차니