linux2019. 10. 15. 12:07

linux version 4.9.x 아래에 추가된 kernel config 인해, snd copy에서 panic 발생함.

우선 disable 시키면 해당 현상은 사라진다

 

security 관련 enhancement 같은데, copy_to_user, copy_from_user를 사용하면 회피할 수 있을 것으로 기대된다.

 

CONFIG_CPU_SW_DOMAIN_PAN: Enable use of CPU domains to implement privileged no-access

 

추가로 구글 사이트를 검색해보면 Kernel Hardening 항목에 설명이 되어있다.

 

PAN emulation (Privileged Access Never)을 위의 config를 통해 활성화 한다.

아래의 본문의 내용은 간단히 말해서 kernel area에서 memcpy를 사용하지 말라는 의미이며 이는 기존 코드의 동작에서 kernel panic이 발생할 수 있음을 암시한다.

 

memcpy -> copy_to_user/copy_from_user 로 변경 필요하다.

 

 

본문: 

PAN emulation exposes direct user space access from the kernel, which is not allowed. 
Drivers attempting to access user space memory need to be changed to use the standard 
copy_to_user()/copy_from_user() functions instead.

 

 

최종 결과 :

PAN emulation enable 이후, 아래와 같이 변경 시 동작 가능하다.

memcpy 자체를 모두 disallow 하는 것은 아니고, user <-> kernel space 간의 direct copy를 disable 하는 것

 

usage : 

copy from kernel space memory to kernel space memory -> memcpy 

copy from user space memory to kernel space memory -> copy_from_user 

copy from kernel space memory to user space memory -> copy_to_user

 

출처:

https://cateee.net/lkddb/web-lkddb/CPU_SW_DOMAIN_PAN.html

https://source.android.com/devices/architecture/kernel/hardening

https://android-developers.googleblog.com/2017/08/hardening-kernel-in-android-oreo.html

'linux' 카테고리의 다른 글

timer example  (0) 2021.07.08
Network interface Restart 시 주의 사항  (0) 2019.11.21
Overview NEC protocol  (0) 2019.06.28
scp 사용법  (0) 2019.06.21
git commit/ clone 관련 tip  (0) 2019.06.13
Posted by easy16
linux2019. 6. 28. 11:19

데이터의 표현 : pulse distance encoding

- 1개의 562.5us pulse 이후 562.5us(total : 1.125ms)의 space0을 의미

- 1개의 562.5us pulse 이후 1.6875ms(total : 2.25ms)의 space1을 의미

 

하나의 message frame은 아래와 같이 구성

- 9ms 의 leading pulse로 시작 , 4.5ms의 space를 가짐
- 8bit의 address 코드 및 inverse코드 ( 이로 인해 0,1의 갯수는 같으며 27ms의 길이를 갖게 됨0

- 8bit의 command 코드 및 inverse 코드 

- 종결을 알리는 1pulse

- leading pulse + address + command (inverse 포함)

 

Repeat 코드

- 9ms leading pulse

- 2.25ms space

- end pulse로 구성 108ms 주기로 반복됨.

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

The NEC IR transmission protocol uses pulse distance encoding of the message bits. Each pulse burst (mark – RC transmitter ON) is 562.5µs in length, at a carrier frequency of 38kHz (26.3µs). Logical bits are transmitted as follows:

  • Logical '0' – a 562.5µs pulse burst followed by a 562.5µs space, with a total transmit time of 1.125ms
  • Logical '1' – a 562.5µs pulse burst followed by a 1.6875ms space, with a total transmit time of 2.25ms

When a key is pressed on the remote controller, the message transmitted consists of the following, in order:

  • a 9ms leading pulse burst (16 times the pulse burst length used for a logical data bit)
  • a 4.5ms space
  • the 8-bit address for the receiving device
  • the 8-bit logical inverse of the address
  • the 8-bit command
  • the 8-bit logical inverse of the command
  • a final 562.5µs pulse burst to signify the end of message transmission.

The four bytes of data bits are each sent least significant bit first. Figure 1 illustrates the format of an NEC IR transmission frame, for an address of 00h (00000000b) and a command of ADh (10101101b).

 

 

 

Figure 1. Example message frame using the NEC IR transmission protocol.

Notice from Figure 1 that it takes:

  • 27ms to transmit both the 16 bits for the address (address + inverse) and the 16 bits for the command (command + inverse). This comes from each of the 16 bit blocks ultimately containing eight '0's and eight '1's - giving (8 * 1.125ms) + (8 * 2.25ms).
  • 67.5ms to fully transmit the message frame (discounting the final 562.5µs pulse burst that signifies the end of message).

REPEAT CODES

If the key on the remote controller is kept depressed, a repeat code will be issued, typically around 40ms after the pulse burst that signified the end of the message. A repeat code will continue to be sent out at 108ms intervals, until the key is finally released. The repeat code consists of the following, in order:

  • a 9ms leading pulse burst
  • a 2.25ms space
  • a 562.5µs pulse burst to mark the end of the space (and hence end of the transmitted repeat code).

Figure 2 illustrates the transmission of two repeat codes after an initial message frame is sent.

Figure 2. Example repeat codes sent for a key held down on the transmitting remote controller.

출처: <https://techdocs.altium.com/display/FPGA/NEC+Infrared+Transmission+Protocol>

 

Posted by easy16
linux2019. 6. 21. 14:18

SCP 사용방법

scp {username}@{server_ip}:{target} {destination}

Posted by easy16
linux2019. 6. 13. 10:00

//이력 확인할 유용한 명령어

git checkout <commit_id> // 특정 커밋시점으로 되돌린다. 

git checkout master //원래 최신 커밋으로 돌아감.

git checkout <branch명>  //지정된 브랜치가 가리키는 커밋을 HEAD가 가리키게 한다. (작업 디렉토리의 파일은 그대로 유지됨)

git checkout -b <branch명> //새로운 브랜치를 만들고  해당 브랜치를 checkout 한다.

git checkout -b <new branch name> <server branch name> // 서버에서 생성되어 있는 브랜치 가져오기

 

 

git clone : 리모트의 branch를 가져오지 않음

 

git branch : 로컬저장소의 브랜치 목록

git branch -r : 원격저장소의 브랜치 목록

git branch -a : 모든 브랜치 목록

 

git checkout -b 생성할브랜치이름 원격브랜치이름

git checkout -t origin/eventsource : 원격저장소의 이름을 그대로 사용.

 

 

출처 : https://blog.outsider.ne.kr/641

'linux' 카테고리의 다른 글

Overview NEC protocol  (0) 2019.06.28
scp 사용법  (0) 2019.06.21
USB 버전 별 속도 및 전압/전류  (0) 2019.06.12
linux serial port (tty) 생존 확인  (0) 2019.06.12
linux에서 USB port 확인 방법  (0) 2019.06.12
Posted by easy16
linux2019. 6. 12. 14:54

1, USB 2.0 : 480Mbps (60MB/s)
-공급 전압/전류 : 5V, 500 mA

2, USB 3.0 SuperSpeed: 5 Gbit/s(625 MB/s)
-공급 전압/전류 : 5V·12 V 900 mA

3, USB 3.2 Gen1 : 5 Gbit/s(625 MB/s)
-이전 버전과는 하위 호환성이 있으며, USB 2.0 장치를 USB 3.0 포트에 연결하거나 USB 3.0 장치를 USB 2.0 포트에 연결하는 경우 모두 USB 2.0 하위호환 모드로 동작한다. 
-케이블은 2.0 이전의 4선에서 9선으로 증가하였기 때문에, 3.0 모드로 동작하기 위해서는 3.0 케이블이 필요하다.
-공급 전압/전류 : 5V, 900 mA로 증가하였다.

4, USB 3.2 Gen2 : 10Gbit/s(1.25GB/s)
-USB 3.1 (Super Speed Plus) 동일 명칭 (참고로 이름이 USB 3.2로 변경되었다)

 

출처: 

https://ko.wikipedia.org/wiki/USB

'linux' 카테고리의 다른 글

scp 사용법  (0) 2019.06.21
git commit/ clone 관련 tip  (0) 2019.06.13
linux serial port (tty) 생존 확인  (0) 2019.06.12
linux에서 USB port 확인 방법  (0) 2019.06.12
find multiple command 입력 방법  (0) 2019.05.24
Posted by easy16
linux2019. 6. 12. 14:34

See which UARTs where detected in /proc/tty/driver/serial. A line with uart:unknown means: nothing detected (and likely not existent).

# cat /proc/tty/driver/serial
serinfo:1.0 driver revision:
0: uart:16550A port:000003F8 irq:4 tx:0 rx:0
1: uart:16550A port:000002F8 irq:3 tx:111780 rx:1321 RTS|DTR|DSR
2: uart:unknown port:000003E8 irq:4
3: uart:unknown port:000002E8 irq:3

If something is connected and driving the lines CTS, DSR or CD (these are input lines) you can even be pretty sure that there actually is something... Same is true for the rx-byte-count.

 

출처: <https://superuser.com/questions/131044/how-do-i-know-which-dev-ttys-is-my-serial-port>

'linux' 카테고리의 다른 글

git commit/ clone 관련 tip  (0) 2019.06.13
USB 버전 별 속도 및 전압/전류  (0) 2019.06.12
linux에서 USB port 확인 방법  (0) 2019.06.12
find multiple command 입력 방법  (0) 2019.05.24
dd 명령어에 대한 고찰  (0) 2019.03.27
Posted by easy16
linux2019. 6. 12. 12:16

 

 

First, disconnect the USB device you’re querying. Then, open a terminal window and input the “list USB” command:

#lsusb

Make a note of the results, then connect the USB device, and run lsusb again.
This time, you should see an extra device listed, with a Bus ID, Device ID, USB ID, and a description. If you can’t work out what the extra device is (you may have an internal USB device, perhaps Ethernet), try a different command.

#dmesg | grep -i USB

The dmesg command will list the connected USB devices on your system. It will also include non-USB hardware, and unfortunately offers an overwhelming amount of information. To counter this, you can try

#dmesg | less

Finally, you could just rely on the more user-friendly

"usb-devices"


This is like a cross between the dmesg and lsusb commands, listing connected USB hardware with enough information to identify them.
So, is the USB you’ve connected listed here? If not, then perhaps the port is damaged or there is a problem with the device. Equally, the device may not be compatible with Linux.

 

 

Tip: kernel에서 hotplugging으로 인식되지 않는다면 usb device의 hardware나 또는 host의 usb port에 대한 이상으로 생각하고 접근.... 내 보드는 대체 왜 인식을 못하나

 

 

 

https://www.makeuseof.com/tag/fix-usb-device-port-linux/

 

 

5 Ways to Fix a Malfunctioning USB Device or Port on Linux

Can't get your USB devices to work properly in Linux? Try these troubleshooting tips to get things working again.

www.makeuseof.com

 

'linux' 카테고리의 다른 글

USB 버전 별 속도 및 전압/전류  (0) 2019.06.12
linux serial port (tty) 생존 확인  (0) 2019.06.12
find multiple command 입력 방법  (0) 2019.05.24
dd 명령어에 대한 고찰  (0) 2019.03.27
RAID의 종류  (0) 2019.03.04
Posted by easy16
linux2019. 5. 24. 10:38

 

Find multiple command

 

Ex) repo sync가 안될 때, 매 .git의 이전 디렉토리로 이동하여 git 명령어 실행

find . -name ".git" -type d -exec sh -c "cd {}; cd .. ; git config core.filemode false" \;

 

Ex2) 특정 keyword가 포함된 파일 찾기 : grep에 "-l" 옵션 사용

 find . -exec grep -l "vol.Events" {} \;

 

https://stackoverflow.com/questions/6336481/how-to-find-exec-cd-in-linux-unix

'linux' 카테고리의 다른 글

linux serial port (tty) 생존 확인  (0) 2019.06.12
linux에서 USB port 확인 방법  (0) 2019.06.12
dd 명령어에 대한 고찰  (0) 2019.03.27
RAID의 종류  (0) 2019.03.04
how to git branch merge  (0) 2019.01.25
Posted by easy16
linux2019. 3. 27. 14:35

참조: 

https://blog.kintoandar.com/2010/02/how-to-disk-dump-dd.html

'linux' 카테고리의 다른 글

linux에서 USB port 확인 방법  (0) 2019.06.12
find multiple command 입력 방법  (0) 2019.05.24
RAID의 종류  (0) 2019.03.04
how to git branch merge  (0) 2019.01.25
find, grep , awk 자주쓰는 옵션  (0) 2019.01.22
Posted by easy16
linux2019. 3. 4. 12:17

SAS 12Gbps

PCIe 기반 확장카드 방식의 SSD

SATA 6Gbps 


RAID는 Redundant Array of Inexpensive Disks 혹은 Redundant Array of Independent Disks의 약자

그 이름에서 유추할 수 있듯 다수의 디스크를 기반으로 하나의 디스크처럼 인식하도록 구성하는 기술을 뜻한다.


RAID 0

일반 사용자들이 RAID라면 가장 먼저 떠올리는 성능 향상용 RAID 방식은 스트라이핑(Striping)이라고도 불리는 RAID 0으로, 각 디스크에 모든 데이터를 나눠 저장하므로 SSD나 하드디스크의 성능을 최대로 쓰면서 용량 낭비도 없고, 두 개 이상의 디스크만 있다면 갯수에 상관없이 구성할 수 있다.


RAID 1

이에 비해 미러링(Mirroring)으로도 불리는 RAID 1의 경우 '거울(Mirror)'이라는 이름처럼 완전히 동일한 데이터를 각각의 디스크에 저장하는 방식으로, RAID 1 구성을 위해서는 두 개 이상의 짝수 디스크가 필요하다.

쉽게 이야기하자면 RAID 1은 디스크에 저장된 내용을 다른 디스크에 실시간 백업하는 것으로 볼 수 있는데, 미러링된 디스크 세트는 특정 디스크에 문제가 발생해도 완전히 똑같은 자료가 남아있으므로 데이터 안정성을 중시할 때 구성하는 방식이다.

RAID 1은 그 특성상 전체 디스크중 절반의 용량을 사용할 수 없고, 쓰기 성능 향상은 기대할 수 없지만, 읽기 성능은 원본과 미러링된 디스크 양쪽에서 불러올 수 있으므로 성능 향상을 기대할 수 있다.


RAID 2/ 3/ 4

앞서 설명한 RAID 0과 RAID 1이 각각 성능과 안정성을 극단적으로 추구한 방식이기 때문에 반대로 안정성과 성능면에서는 서로 부족한 모습을 보이는데, 이를 개선하기 위해 새롭게 등장한 RAID 구성 방식이 있다.

그 중 앞서 개발된 것이 RAID 2/ 3/ 4로, 실제 데이터를 저장하는 디스크는 성능 향상을 위해 RAID 0으로 구성하고, 여기에 데이터 복구를 위한 별도의 디스크가 추가된 형태이다.

RAID 2는 bit 단위, RAID 3은 byte 단위, RAID 4는 block 단위로 데이터를 분산 저장하며, RAID 2는 데이터 복구를 위한 헤밍코드를, RAID 3/ 4는 페리티 코드를 이용하므로 RAID 0이나 RAID 1에서 부족했던 점들이 개선되었지만, 뒤를 이어 개선된 RAID 방식이 등장함에 따라 현재는 사장된 방식이다



RAID 5/ 6

RAID 2/ 3/ 4를 밀어낸 RAID 방식은 바로 Level 5와 Level 6으로, 각각의 디스크에 데이터를 분산 저장하여 성능을 높이면서도 다른 디스크에 저장된 데이터 복구를 위한 페리티 정보를 함께 저장해 안정성을 높인 방식이다.

이렇게 데이터와 페리티 정보가 분산 저장됨에 따라 RAID 2/ 3/ 4 방식에 비해 특정 디스크에 문제 발생시 바로 대처할 수 있는데, RAID 5는 하나의 페리티 정보를 저장하므로 하나의 디스크에 문제 발생시 대처가 가능하지만 두 개의 디스크에 문제 발생시 대처하기가 어렵다.

RAID 6는 페리티 정보를 두 개의 디스크에 저장하므로 두 개의 디스크 고장까지 대응할 수 있지만, 이를 위해 복잡한 연산이 필요하므로 쓰기 작업 구현이 복잡해서 일반적으로 잘 사용되지 않으며, RAID 5는 최소 세 개, RAID 6 구성에는 네 개의 디스크가 필요하다.




현재 주로 쓰이는 RAID 기술은 성능 중시형 RAID 0과 안정성 중시형 RAID 1, 성능과 안정성을 둘 다 고려한 RAID 5가 있지만, 기존에 RAID 2/ 3/ 4와 같이 다양한 방식의 RAID 구성이 가능하다.



기본 RAID의 응용, 01/ 10/ 50/ JBOD

현재 주로 쓰이는 RAID 기술은 성능 중시형 RAID 0과 안정성 중시형 RAID 1, 성능과 안정성을 둘 다 고려한 RAID 5가 있지만, 기존에 RAID 2/ 3/ 4와 같이 다양한 방식의 RAID 구성이 가능하다.

대표적인 것이 바로 인텔 메인보드 칩셋에서도 기본 지원하는 RAID 10(1+0)으로, RAID 1(미러링)로 안정성을 확보한 디스크 세트들을 RAID 0(스트라이핑)으로 성능을 확보하는 방식이며, RAID 01은 그 반대의 경우(스트라이핑 후 미러링)이다. 

또한 RAID 50은 RAID 5를 기반 디스크 세트를 RAID 0으로 더해 안정성을 더한 방식이다.



한편, RAID는 특성상 용량이 다른 디스크를 이용할 경우 더 큰 용량 디스크의 여분 공간을 버리게 되므로 동일한 용량의 디스크를 이용해야 용량의 낭비가 없는데, Spanning으로도 불리는 JBOD(Just a Bunch of Disks)은 서로 다른 용량의 디스크를 마치 하나의 디스크처럼 사용할 수 있도록 해주는 기술이다.



JBOD(Just a Bunch of Disks)

다른 RAID 레벨과 달리 성능이나 안정성면에서 아무런 이득이 없지만 용량 낭비가 없고, 데이터가 각각의 디스크에 순서대로 저장되므로 특정 디스크에 문제가 발생할 경우 해당 디스크에 저장된 자료만 손실되어 RAID 0에 비해 데이터 손실 위험성이 낮다.


출처:

https://m.post.naver.com/viewer/postView.nhn?volumeNo=3410080&memberNo=11608918&vType=VERTICAL

Posted by easy16