블로그 이미지
훅크선장

카테고리

분류 전체보기 (361)
사진이야기 (23)
펭귄컴퓨팅 (120)
라이브씨디 (102)
프로그래밍 (14)
임베디드 리눅스 (4)
컴퓨터보안 (84)
절름발이 프로그래머 (59)
하드웨어개조 (23)
멀알려줄까 (35)
홈베이킹&홈쿠킹 (2)
잡다한것들 (15)
Total
Today
Yesterday

달력

« » 2024.4
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

공지사항

태그목록

최근에 올라온 글

CZNIC 라는 체코 회사에서 만든 Turris Omnia, 오픈소스 OpenWRT 기반으로 만들어진 매우 훌륭한 라우터이지만, 이미 몇 년전에 회사가 망했는지? 더이상 업데이트도 안되고 있어서, 결국 OpenWRT 펌웨어로 바꿔서 사용해야 한다.

https://openwrt.org/toh/turris/turris_omnia

 

[OpenWrt Wiki] Turris CZ.NIC Omnia

U-Boot 2015.10-rc2 (Aug 18 2016 - 20:43:35 +0200), Build: jenkins-omnia-master-23 SoC: MV88F6820-A0 Watchdog enabled I2C: ready SPI: ready DRAM: 2 GiB (ECC not enabled) Enabling Armada 385 watchdog. Disabling MCU startup watchdog. Regdomain set to ** MMC:

openwrt.org

 

0. 먼저 해당장비의 U-Boot를 업데이트 해줘야 한다.

Update U-Boot if needed

Log into the factory OS (TurrisOS), and take note of the U-Boot version installed on your device: strings /dev/mtd0 | grep “U-Boot 20”. Alternatively, watch the serial console when booting.

Only if you have a very old Turris Omnia with U-Boot 2015.10-rc2:

  1. Make sure that you are running TurrisOS >= 5.2, and install the turris-nor-update package.
  2. Execute nor-update, to bring U-Boot to a more recent version (which supports OpenWrt's boot script).
  3. After rebooting, check the U-Boot version again. It should be at least U-Boot 2019.07.

https://repo.turris.cz/hbs/medkit/omnia-medkit-latest.tar.gz

 

※ Omnia 복구모드 설명 

https://docs.turris.cz/hw/omnia/rescue-modes/

 

1. USB를 이용한 Stock 펌웨어 복구 모드 

https://www.youtube.com/watch?v=ZrWzpsxqaRU

 

가장 최신?의 Stock 펌웨어 omnia-medkit-latest.tar.gz 파일을 FAT32로 포맷된 USB 장치의 root 영역에 복사한 다음,

장비의 USB 포트에 꽂고나서, 위 복구 동영상과 같이, 장비 후면의 reset 버튼을 길게 누르고, 전면 LED가 4개 켜지는 순간( LED 숫자 2 까지 불이 켜지면,) reset 버튼에서 손을 뗀다. 그럼 USB 장치에 있는 펌웨어로 장비가 자동으로 복구된다.

 

2. Rescue Shell 모드를 이용한 OpenWRT 펌웨어 설치

https://downloads.openwrt.org/releases/23.05.2/targets/mvebu/cortexa9/openwrt-23.05.2-mvebu-cortexa9-cznic_turris-omnia-sysupgrade.img.gz

1) 상위와 같은 최신 버전의 펌웨어 파일을 컴퓨터로 다운로드한다. 그리고, 해당 파일을 gunzip으로 압축을 풀어서, openwrt-23.05.2-mvebu-cortexa9-cznic_turris-omnia-sysupgrade.img 파일로 만듭니다.

2) img 파일을 FAT32로 포맷된 USB 장치의 root 영역에 복사한 다음, 장비의 USB 포트에 꽂고나서, 장비 후면의 reset 버튼을 길게 누르고, 전면 LED가 5개 켜지는 순간( LED 숫자 3 까지 불이 켜지면,) reset 버튼에서 손을 뗀다.

3) 장비가 2) 과정에 의해 rescue shell 모드가 되면, 노트북의 IP를 192.168.1.2/24로 설정하고, 장비에 192.168.1.1 로 접속한다. 이때, 반드시 랜 케이블은 장비의 LAN 포트 4번에 연결하여야 한다. (※ 다른 포트에 연결하면 안된다!!)

ssh root@192.168.1.1  명령어로 접속할때, 키 교환 에러가 발생하면,

ssh -v -oHostKeyAlgorithms=+ssh-rsa root@192.168.1.1

명령어로 접속하면 된다.

4) rescue shell로 접속하면, 아래 명령어로 먼저 usb 장치를 마운트한다.

mkdir mnt

mount /dev/sda1 /mnt

5) 다음 명령어로 OpenWRT 펌웨어를 설치한다.

dd if=/mnt/openwrt-23.05.2-mvebu-cortexa9-cznic_turris-omnia-sysupgrade.img of=/dev/mmcblk0 bs=4096 conv=fsync

Posted by 훅크선장
, |

www.nxp.com/design/software/development-software/codewarrior-development-tools/run-control-devices/codewarrior-tap:CW_TAP

 

CodeWarrior® TAP | NXP

Distributor Name Region Inventory Inventory Date Upon selection of a preferred distributor, you will be directed to their web site to place and service your order. Please be aware that distributors are independent businesses and set their own prices, terms

www.nxp.com

NXP 사의 JTAG Debugger인 CodeWarrior TAP 장비에는 반드시 케이블을 연결해야만, 장비 디버깅이 가능하다.

왜냐하면, CodeWarrior TAP 장비에 연결포트는 30pin 이고, 우리가 일반적인으로 보고 있는 디버깅 대상 장비(표준 개발 장비)는 보통 20pin 이나 16pin과 같은 표준 JTAG 포트를 쓰기 때문이다.

무슨 이유인지 몰라도, CodeWarrior TAP  장비의 전용 케이블들은 본 장비와 별도로 구매해야 하고, 가격도 70달러 즈음이라 안 살 수가 없다는 것이 날벼락이다.

 

표준 JTAG 포트와 같이 pin map을 알려주면, JTAG 포트가 표준이 아닌 장비에도 JTAG 케이블 없이 바로 장비 포트에 연결해서 사용할 있을 것 같은데... 케이블 팔아서 부자되려고 하는지? 30pin의 pin map을 공개하지 않고 있다. (아무리 찾아봐도 안보인다!!) 

 

결국 NXP가 판매하는 전용 케이블, 16pin JTAG 케이블인 CWH-CTP-COP-YE 를 구해서, Pin Map을 그려보았다.

www.nxp.com/design/software/development-software/codewarrior-development-tools/run-control-devices/power-architecture-processor-cop-probe-tips-for-codewarrior-tap:CWH-CTP-COP-YE

 

Pin Map of CWH-CTP-COP-YE :

Posted by 훅크선장
, |

https://diyprojects.io/armbian-update-kernel-test-versions-nightly/#.WkkIbVTvCL4

를 참조해서, 정리한 것입니다.


Orange Pi+ 2e 커널 4.x  업그레이드 성공방법


아래과정은 반드시 순차적으로 다른 작업 없이, 이루어져야 합니다. 중간에 다른 작업 또는 명령어가 어떤 먹통 상황을 만들지 모릅니다.


1. 기존 패키지들 삭제

# aptitude remove ~nlinux-dtb ~nlinux-u-boot ~nlinux-image ~nlinux-headers

# aptitude remove ~nlinux-firmware ~narmbian-firmware ~nlinux-$(lsb_release -cs)-root


위 두 명령어를 실행하면, 


실제로는  linux-image-sun8i linux-u-boot-orangepiplus2e-default 두 개 패키지와

               armbian-firmware linux-jessie-root-orangepiplus2e     두 개 패키지만이 제거된다.


2. 새로운 커널 패키지들을 설치

# apt-get install linux-image-dev-sun8i linux-dtb-dev-sun8i linux-headers-dev-sun8i 

# apt-get install linux-u-boot-orangepiplus2e-dev linux-$(lsb_release -cs)-root-dev-orangepiplus2e 

# apt-get install armbian-firmware sunxi-tools swconfig a10disp


실제로는 linux-jessie-root-dev-orangepiplus2e linux-u-boot-orangepiplus2e-dev  두 개 패키지만이 새로이 설치된다.


※ linux-firmware-image-dev-sun8i 패키지 설치가 권장하고 있는데, 설치는 되지 않으며, 실제로 설치하지 않아도 큰 문제가 없는 것으로 보인다.


3. 새로 설치된 커널로 재부팅

# reboot


리부팅 후에, #uname -a 명령어로 커널이 4.x 대가 된 것을 확인한다.


4. 데비안 패키지 jessie  버전(8.x 대)을 stretch  버전(9.x 대)으로 변경


apt 패키지의 레포지트리 소스 설정을 한다.

/etc/apt/sources.list 와 /etc/apt/sources.list.d/armbian.list  두 파일을 수정한다. 


# vi /etc/apt/sources.list 

하고서, 내용 중에 jessie 문자열을 모두 stretch 문자열로 바꾼다.


# vi /etc/apt/sources.list.d/armbian.list 

하고서, 역시 내용 중에 jessie 문자열을 모두 stretch 문자열로 바꾼다.


armbian 용 패키지 업데이트를 위해서, gpg 키 임포트한다.

# wget -qO - http://apt.armbian.com/armbian.key | sudo apt-key add -



5.  패키지 업데이트 와 업그레이드

# apt update

# apt upgrade


6. 새로운 운영체제?로 재부팅

# reboot



7. 추가적인 패키지 설치

X-windows 환경과 한글 환경 추가


# apt-get -y install xorg lightdm xfce4 tango-icon-theme gnome-icon-theme


이후, hdmi 의 그래픽으로 로그인


xterm 말고 좋은 터미널 프로그램을 설치 사용

# apt install xfce4-terminal


8. 한글 환경 설정 

한글 폰트 설치

# apt install fonts-nanum


한글 사용을 위한 로케일 생성

# vi /etc/locales.gen

한 다음, ko-kr utf8 라인의  주석표시 # 제거


한글 로케일 생성

# locale-gen


한글 입력기 설치 및 설정

# apt install nabi libhangul1 libhangul-data im-config

# im-config -n hangul


9. 재부팅해서, 완전한 환경 맛보기

# reboot



※ 한글 환경이 완성되고 나서도, 파이어폭스 웹 브라우저가 필요함.

# apt install firefox-esr


아마도 시스템 한계때문인지 설치 시간 엄청 걸림.

Posted by 훅크선장
, |
갑자기 어떤 이유로 인하여,
인터넷에 연결되지 않은 폐쇄망에 대한 NTP 서버 운영에 대한 정보를 찾다가 시작하게 된,
GPS 기반의 NTP 서버 만들기의 과정을 정리하였습니다.

먼저, 전세계에 있는 stratum 시계에 대한 정보는 여기를 참고하시면 됩니다. 


필요한 준비물은 3가지 입니다. 물론, 컴퓨터는 별도로 한 대 더 있어야 합니다.

1) 라즈베리파이 B+ (B+가 아닌, 이전 버전도 충분히 가능)
http://www.eleparts.co.kr/EPXDFYBF (여기 모델이 투명케이스랑 방열판 포함임)

2) 국내에서 현재 구할 수 있는 라즈베리파이용 GPS 모듈은 안테나 포함으로 여기에~,

3) 4GB 이상의 MicroSD 카드 (운영체제 설치 및 데이터 저장용)


자, 이제 시작해봅시다.

1. 라즈베리파이에 OS설치
RASPBIAN Debian Wheezy 를 설치한다. 리눅스나 맥 OS X 에서는 dd 명령어를 사용
다음을 참조

2. 라즈베리안 OS를 업데이트
라즈베리안으로 부팅한 다음, 
반드시 키보드와 언어, 지역을 미국 qwerty 자판과 미국영어로 바꾸어준다.
라즈베리안은 기본으로 영국식 키보드가 되어있어서, # 문자 안 찍힌다. (영국애들의 자존심이란...)

$ sudo apt-get update
$ sudo apt-get dist-upgrade
 위 명령어를 통해서, 최신 라즈베리안으로 업데이트 한다. (시간이 좀 걸린다.)
 
3. GPS 모듈을 장착하기 위해서, Serial Console을 비활성화 한다.
이 과정을 안하고, GPS모듈을 꽂으면, 엄청난 양의 이상한 로그메시지를 콘솔 화면에서 보게 될 것이다.
(이런 것이 생기는 이유는 기본적으로 라즈베리파이가 Serial Console을 지원하는데, 그 연결핀이 GPS 모듈과 동일하게 사용하다보니, Serial Console을 활성화한 상태로 GPS  모듈을 꽂아서 라즈베리파이를 구동하며, 해당핀을 통해서 GPS 모듈의 데이터가 계속 유입되기 때문이다.)

/boot/cmdline.txt 에서 “console=ttyAMA0,115200 kgdboc=ttyAMA0,115200” 부분을 삭제한다.
그리고
/etc/inittab 파일의 제일 뒷 부분에 있는
T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
이 부분을 #를 맨 앞에 넣어서 주석처리하여 Disable 상태로 만든다.


여기에 있는 내용을 참고하였다.

3-1. 혹시, 라즈베리파이에 hdmi 모니터,키보드,마우스를 연결해서 작업하는 것이 너무 귀찮아면, ssh 원격접속으로 다 설정할 수 있다. ssh 원격접속을 위한 네트워크 설정 및 ssh 데몬 설정 내용은 다음 링크를 참고하면 된다.

4. GPIO 포트로 들어오는 PPS 신호를 처리하기 위한 설정을 한다.
/boot/cmdline.txt 의 마지막 부분에, 즉 한 라인의 제일 뒷 부분에, 
bcm2708.pps_gpio_pin=18
내용을 추가해준다.

/etc/modules 파일의 마지막 부분에 새로운 라인으로
pps-gpio
를 추가한다.

라즈베리파이를 리부팅한다. sudo poweroff 했다가, GPS 모듈을 꽂고 다시 전원을 켜면 된다.

# dmesg | grep pps 명령으로 부팅과정에서 pps 디바이스를 인식하였는지를 알 수 있다.:

4-1. /etc/motd 파일에 쓰여있는 내용을 다 지운다.

# sudo rm -f /etc/motd
#sudo touch /etc/motd

매번 로그인할 때마다, 귀찮은 문구들이 뜨는 것을 없앨 수 있다.

5. PPS 를 지원하는 ntp 패키지 버전을 받아서, 컴파일 하고 설치한다.
위 링크에 있는 내용을 참고하였다.

다운로드하는 곳은 http://archive.ntp.org/ntp4/
현재 stable 버전은은 ntp-4.2.6p5.tar.gz

$ mkdir ntp                  # make a convenient working directory, if you don't already have one
$ cd ntp                     # enter that directory
$ sudo apt-get install libcap-dev # once-off, required to prevent later file not found error
# Get the desired tarball, current or development - use one of the following:
$ tar xvfz ntp-4.2.6p5.tar.gz
$ cd ntp-4.2.6p5
$ ./configure --enable-linuxcaps # takes 11-15 minutes
$ make # takes 18-25 minutes
$ sudo make install          # puts ntp* in /usr/local/bin/ntp*, takes 30-60 seconds

$ sudo /etc/init.d/ntp stop
$ sudo cp /usr/local/bin/ntp* /usr/bin/
ntp로 시작하는 파일뿐만 아니라, 새로 컴파일된 모든 파일을 복사해야 한다.

apt-get remove ntp를 해야된다고도 하는데, 이건 패키지의 설치파일들을 한번 비교해보면 될 듯~~!

$ sudo /etc/init.d/ntp start
$ ntpq -crv -pn # optional step to check for version and basic function


5. 2014년 12월 30일에 확인한 바로는,

# sudo apt-get dist-upgrade
명령어를 수행하면, ntp패키지가 4.2.6p5+dfsg-2+deb7u1 으로 업그레이드 되어, 별도의 atom pps 지원용의 패키지를 컴파일 하지 않아도 된다. 새로운 ntp 패키지는 atom pps를 지원하고 있다.


6. pps 도구와 gpsd 프로그램들을 받아서 설치하고 테스트해본다.

아래를 참조하였다.

제일 먼저 다음 명령어를 실행하여야 한다.
$ sudo apt-get install pps-tools

그리고, gpsd 관련 프로그램들을 설치한다.
pi@raspberrypi:~$ sudo apt-get install gpsd gpsd-clients python-gps


7. gpsd 데몬을 실행시킨다.
우리가 사용하는 gps 모듈은 디바이스 명칭이 ttyAMA0 이며, 반드시 모듈과의 연동속도를 지정해주어야 한다.
이 제품은 38400 baud rate가  기본 속도이다~!

gpsd가 동작하게 하려면, 반드시
# sudo stty -F /dev/ttyAMA0 38400
명령을 먼저 해줘야 한다.

# sudo gpsd -F /var/run/gpsd.sock /dev/ttyAMA0
 하고, gpsd 데몬을 띄우면


# sudo cgps -s
 명령으로 gps 상태가 잘 동작함을 알 수 있다.
다음과 같은 화면이 출력되어야만, 라즈베리파이와 gps 모듈이 잘 연동되고 있는 것이다.


┌───────────────────────────────────────────┐┌─────────────────────────────────┐
│    Time:       2012-06-18T15:05:10.0Z     ││PRN:   Elev:  Azim:  SNR:  Used: │
│    Latitude:    51.231848 N               ││  14    43    249    40      Y   │
│    Longitude:    0.514014 E               ││  25    75    283    37      Y   │
│    Altitude:   132.3 m                    ││   2    26    085    31      Y   │
│    Speed:      0.0 kph                    ││  12    56    070    18      Y   │
│    Heading:    0.0 deg (true)             ││   9    19    133    22      Y   │
│    Climb:      0.0 m/min                  ││  27    09    133    17      Y   │
│    Status:     3D FIX (1 secs)            ││   4    17    045    31      Y   │
│    GPS Type:                              ││  32    05    321    20      Y   │
│    Longitude Err:   +/- 8 m               ││  29    41    192    18      Y   │
│    Latitude Err:    +/- 9 m               ││  31    28    304    42      Y   │
│    Altitude Err:    +/- 27 m              ││                                 │
│    Course Err:      n/a                   ││                                 │
│    Speed Err:       +/- 68 kph            ││                                 │
│                                           ││                                 │
│                                           ││                                 │
│                                           ││                                 │
│                                           ││                                 │
│                                           ││                                 │
└───────────────────────────────────────────┘└─────────────────────────────────┘


8. 마지막으로 ntp 서버를 설정한다.
 
/etc/ntp.conf 파일을 다음과 같이 수정한다.


driftfile /var/lib/ntp/ntp.drift statistics loopstats peerstats clockstats filegen loopstats file loopstats type day enable filegen peerstats file peerstats type day enable filegen clockstats file clockstats type day enable # Server from shared memory provided by gpsd server 127.127.28.0 minpoll 4 maxpoll 4 fudge 127.127.28.0 time1 0.000 refid GPS # By default, exchange time with everybody, but don't allow configuration. #restrict -4 default kod notrap nomodify nopeer noquery #restrict -6 default kod notrap nomodify nopeer noquery # Local users may interrogate the ntp server more closely. restrict 127.0.0.1 restrict ::1

다음은 IP 접속제한을 풀어내는 disable 설정이다.

#restrict -4 default kod notrap nomodify nopeer noquery

아마도 다음과 같은 내용이 있었을 것인데, 우리는 폐쇄망에 있기 때문에 인터넷의 시간서버 설정을 모두 제거한다.

server 0.debian.pool.ntp.org iburst

server 1.debian.pool.ntp.org iburst server 2.debian.pool.ntp.org iburst server 3.debian.pool.ntp.org iburst

실제로 우리의  GPS 모듈에서 시간을 받아오는 설정은 다음과 같다.

# Server from shared memory provided by gpsd
server 127.127.28.0 minpoll 4 maxpoll 4
fudge  127.127.28.0 time1 0.000 refid GPS

/etc/ntp.conf 파일을 수정하였으면, ntp 데몬을 재시작시킨다.

sudo /etc/init.d/ntp restart


그리고, ntp 서버의 상태를 확인한다.

# sudo ntpq -p -n
위 명령을 수행하며, 다음과 비슷하게 표시되어야 한다.
특히, reach 값은 377 이어야 한다.  377이 되기까지는 어느정도 시간이 걸린다. GPS신호가 꽤 많이 잡히게 되어야 하기 때문이다.

     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*127.127.28.0    .GPS.            0 l    7   16  377    0.000   -353.23 15.024

9. 다음의 링크를 참고해서, 열심히 공부하면 시간을 좀더 정확하게  offset 값에 따라서 보정하는 방법을 알 수 있다.


보정이란게, ntp.conf 파일에서 다음 내용의 0.000을 앞에서 offset 값을 써주기만 하면 된다. offset 값은 지리적 위치나 위성의 gps 신호에 따라서 매번 변하기 때문에, 적당한 평균값이나 최소값을 사용해야만 할 것이다.
fudge  127.127.28.0 time1 0.000 refid GPS
10. 미해결 상황
아직 해결하지 못한 문제가 있다.
혹시라도 라즈베리파이가 꺼졌다가 다시 켜거나, 재부팅된 상황이 생긴다면,
반드시 꼭 다음의 명령어를 한번 실행해줘야 한다.
# sudo stty -F /dev/ttyAMA0 38400

gps 모듈의 연동속도를 지정하는 것인데, gpsd 데몬이 실행되기 위한 필수요소이다.

rc.local 파일에 추가하여, 리눅스 부팅시마다 실행되도록 해 보았으나 효과가 없었다.
setserial 패키지를 설치해서 설정을 적용도 시켜봤으나 실패하였다.

아직 왜 그래야 하는지 잘 모르겠으나, 아무튼 위 명령어를 한번 반드시 수행해주지 않으면,
gpsd가 정상적으로 동작하지 않으며, ntpd 데몬이 시간 정보를 가져오지 못하는 결과를 초래한다.

혹시 누군가 해결방법을 안다면 알려주시기 바란다.


Posted by 훅크선장
, |