시력 보호를 위해 모니터의 색온도를 조절하여 사용하는 사람들이 많이 있다.

Windows 에서는 Flux 라는 프로그램을 사용하는데,

Ubuntu 에도 Flux 가 있지만, 원하는 동작을 제대로 해주지 않는다.


Flux 대신 Redshift 를 사용하면

보다 편하게 화면의 색온도를 설정할 수 있다.

Redshift 는 Ubuntu 12.04 버전 이후로 사용할 수 있다.


설치 방법

sudo apt-get install redshift-gtk

※Debian: sudo apt-get install redshift


Redshift 를 설치 후 아래의 명령어로 색온도를 설정 할 수 있다.

$ redshift -o <temperature>


다른 많은 옵션도 있지만, 버그가 있는지 잘 안되는 명령어도 있는 듯하다. 다양한 옵션을 man 으로 확인 할 수 있다.

그냥 단순히 색온도를 설정해서 사용하기엔 편리하다.

 


'Programming > Linux' 카테고리의 다른 글

HandBrakeCLI  (0) 2018.04.06
Linux sed  (0) 2018.02.05
Linux find  (0) 2018.02.04
Ubuntu sources.list generation  (0) 2017.09.06
Linux timezone  (0) 2017.06.20

Xilinx bootgen 을 이용해 boot.bin 파일을 생성하면,

boot.bif 에 담긴 파일들(FSBL, bitstream, u-boot)이 boot.bin 으로 합쳐진다.


따라서, 해당 파일들을 boot partition에 넣을 필요 없이,

boot.bin 만 넣어주면 문제 없이 작동한다.

'Programming > Verilog' 카테고리의 다른 글

AXI Register Slice  (0) 2020.02.12
Verilog Generate  (2) 2018.07.05
Xilinx SDK disable cache  (0) 2017.06.12
Xilinx Vivado IP import  (0) 2017.05.31
Xilinx Vivado Project가 안 열릴때  (0) 2017.05.30

extern keyword 


일반적으로 전역 변수를 선언 하면, 한 파일 내에서 전역 변수로 접근이 가능하다.

다른 파일에서 선언된 전역 변수를 접근하기 위해서는 extern keyword 를 사용한다.


사용법은 간단하다.

전역 변수 선언 시 일반적으로 선언 하듯 선언 하고,

접근하고자 하는 다른 파일에서 data type 앞에 extern 을 선언하면, 접근이 가능하다.

int a=5;


extern int a;

printf("a=%d in other file", a);

//print result

//a=5

extern keyword 를 사용하면 다른 파일에서 접근이 가능하기 떄문에, 즉, 다른 파일에서 해당 이름의 변수를 가지고 있기 때문에

같은 이름의 변수를 두 개를 가지는 등의 의도치 않은 동작을 할 수 있다.

사용 시에 주의가 필요하다.


extern keyword 의 또다른 사용법이 있다.

C++ 파일을 사용하는데, C로 된 파일/함수 등을 include 하고 싶은 경우!

extern "C"{

#include <stdio.h>

void foo();

}


'Programming > C Language' 카테고리의 다른 글

static  (0) 2018.07.13
가변 인자(variable arguments) stdarg.h  (0) 2017.12.11
static  (0) 2017.06.20
Floating Point Bit 출력 방법  (0) 2017.06.08
전처리기 명령어  (0) 2017.06.07

static Keyword


기본적인 C/C++ 프로그래밍에서 흔히 사용하는 키워드는 아니다.

하지만, Code 가 여러 파일로 구성되고, 여러 파일에서 서로 참조하고 왔다갔다하면서 부터 사용하게 되는 keyword 일 수 있다.


static 은 정적 변수라고 하는데, 

함수 내부에 선언하는 지역 변수는 그 지역이 사라지면서, 함께 사라지는데 이를 방지 하기 위한 keyword 이다.

함수 내부의 변수를 data type 앞에 static 을 붙여 선언하면, 메모리 위치에서 사라지지 않아, 

다음에 함수가 call 되더라도 이전 값을 유지하고 있다.

다만 여전히 지역 변수이기 때문에, 해당 함수에서만 읽고 쓸 수 있다.

static 으로 선언한 변수의 initialize 는 처음 한 번 만 실행 된다.

void function(){

static int a = 1;

print("%d\t", a);

a++;

}


int main(){

function(); //print result : 1

function(); //print result : 2

function(); //print result : 3

return 0;

}


'Programming > C Language' 카테고리의 다른 글

static  (0) 2018.07.13
가변 인자(variable arguments) stdarg.h  (0) 2017.12.11
extern  (0) 2017.06.21
Floating Point Bit 출력 방법  (0) 2017.06.08
전처리기 명령어  (0) 2017.06.07

Bash script 실행 할 때 Arguments 를 넣는 방법


C/C++ 에서 와 마찬가지로 Argument 순서대로 1, 2, 3, ... 으로 들어간다.(0번은 실행 스크립트 파일 이름)

달러+번호 가 해당 argument에 해당하며, argument 총 갯수는 $#으로 반환된다(여기서 argument의 총 갯수는 실행 스크립트 argument를 제외한 순수 argument 들의 갯수이다.)

실행 스크립트는 0번째 argument, 즉, $0가 된다.

if [ $# -ne 2 ]

then

echo "please input arguments"

echo "Usage:$0 <input1> <input2>

exit

fi


arg1=$1

arg2=$2


파일로 부터 읽어, Argument 를 전달 할 수 도 있다.

while read line

do 

echo $line

./script $line

done < $file


※ Bash script 내 에서 실행하는 다른 script 또는 다른 실행 파일로 print 를 하는 경우 argument 로 전달 될 수 있음


'Programming > Bash Script' 카테고리의 다른 글

Bash Script Variable Split by Space  (0) 2018.02.04
Bash Script Echo  (0) 2018.02.04
Bash Script String  (0) 2017.07.04
Bash Script If statement  (0) 2017.07.04
Bash script sudo 권한 체크  (1) 2017.06.19

Linux Time zone 변경 하는 방법


우선 date 명령어로 시스템의 시간을 확인하자

$ date

끝에 KST로 나와야 한국 시간


/etc/localtime 파일을 해당 타임존의 파일로 교체해 주면 된다. (binary 파일이라 열어도 알아볼 수는 없다.)

$ mv /etc/localtime /etc/localtime.bak

$ ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime


'Programming > Linux' 카테고리의 다른 글

HandBrakeCLI  (0) 2018.04.06
Linux sed  (0) 2018.02.05
Linux find  (0) 2018.02.04
Ubuntu sources.list generation  (0) 2017.09.06
Ubuntu Redshift  (0) 2017.07.02

Linux Kernel programming 을 할 때는 일반적인 printf 함수를 사용 할 수 없다.

Kernel 에서 Debugging 등을 위해 print를 하고자 하는 경우

printk 함수를 사용할 수 있다.

헤더는 linux/kernel.h


사용법은 printf 함수와 유사하다.

printk("hello world\n");

printk("a=%d\n, a);

사용법은 비슷하지만, kernel에서 print 하는 것이기 때문에 print 된 것은 userspace 에서 보이지 않는다.

따라서, 프로그램 실행 후에 dmesg 를 통해 kernel message 를 확인해야 한다.

$ dmesg


printk 사용 시 floating point number 를 print 하는 데 문제가 생길 수 있다.

undefined reference to __aeabi_f2d 라고 나오는 것은 그 때문이라고 할 수 있는데,

Floting point 자체를 지원하지 않기 때문이다.

Kernel 버전 혹은 CPU 에 따라 kernel 내부에서 floating point 를 지원하는 경우도 있고, 지원하지 않는 경우도 있다.

'Programming > Linux Kernel' 카테고리의 다른 글

cross kernel debugging  (0) 2020.06.19
Linux kernel module compile from linux source  (0) 2019.01.17
Kernel module programming  (0) 2018.05.23
Kernel Version Check  (0) 2018.05.23

Bash script 를 sudo 권한으로 실행하는지 여부를 확인하고자 하는 방법은 아래와 같다.

if [ $EUID -ne 0 ]

then

echo "please run as root"

exit

fi

$EUID 는 Effective User ID 로 0 인 경우 root 를 나타낸다.


'Programming > Bash Script' 카테고리의 다른 글

Bash Script Variable Split by Space  (0) 2018.02.04
Bash Script Echo  (0) 2018.02.04
Bash Script String  (0) 2017.07.04
Bash Script If statement  (0) 2017.07.04
Bash script argument  (0) 2017.06.20

OrangePi Plus 2에 Ubuntu 설치 방법이다.


OrangePi Plus 2 는 RaspberryPi 의 모조품 이라 할 수 있는, 중국의 OrangePi의 제품 중 하나로, 

AllWinner H3 SoC, 2GB DDR3 SDRAM, 1G Ethernet interface, 16GB eMMC 및 SATA 2.5 interface를 가지고 있는 것이 특징이다.

AllWinner H3 SoC 는 ARM Quad-core Cortex-A7 CPU 와 ARM Mali 400 GPU 및 H.265 Codec 을 포함하고 있지만, 발열이 심하다고 알려져 있다.(실제로 발열문제는 심각하다.)


기존에 OrangePi 에서 다운받을 수 있는 Linux version 은 인터넷이 되지 않는 문제가 있었지만,

오랜만에 들어가 보니 상당한 업데이트를 한 듯한 느낌이 든다.


OrangePi 공식 홈페이지에서 wiki 타고 google drive로 이동해 원하는 Linux 이미지를 다운 받아서 Disk Imager 로 구워주면 끝

Ubuntu MATE vivid 버전으로 테스트 해봤는데 별 문제 없이 잘 작동한다.


요즘에는 ARMbian이 더 잘 Support 해주는 느낌이 들어 ARMbian으로 설치 하고자 한다.

Ubuntu 16.04(Xenial) 버전도 설치 가능하다. @.@


설치 방법은 간단하다.

1. SD 카드를 준비한다. (사실 microSD 카드)

2. SD Card Formatter 를 이용해 FAT32 로 포멧한다. (사실 꼭 SD Card Formatter 를 써야하는지 모름)

3. ARMbian Ubuntu Image 를 다운받아 압축을 푼다. (해당 보드에 맞는 image 를 다운 받아 압축을 풀면 됨. 압축은 반디집으로 풀었음)

4. Win32 Disk Imager 를 이용해 image 를 굽는다. 

5. OrangePi 에 SD 카드를 넣고 전원을 넣어준다.

6. HDMI 연결을 통해 부팅 된 OrangePi 를 확인한다. (UART 를 사용해도 되지만 사실상 HDMI 가 편함)

   (로그인 ID:root PW:1234)

'Programming > OrangePi' 카테고리의 다른 글

sftp 네트워크 드라이브 연결  (0) 2018.04.05
OrangePi Plus 2 + SATA  (0) 2017.10.02
OrangePi 에 Telegram Bot 구축하기  (0) 2017.09.16
OrangePi Fan on GPIO  (0) 2017.09.15
U+ 공유기 포트포워딩 문제  (0) 2017.09.09

Xilinx SDK 에서 Baremetal로 실험할 때,

Icache / Dcache를 disable 할 수 있다.


hello world 프로젝트를 생성하면, 기본적으로 platform 헤더를 include 하면서, init_platform() 으로 시작 / cleanup_platform() 으로 끝을 내는 함수를 준다.

여기서 init_platform() 함수에서 Icache, Dcache 모두를 enable 시키는 데, 이를 지움으로써, Cache를 disable 시킬 수 있다.

다만, Cache를 disable 한다는 것은 Cache에 write를 하지 않는 다는 것을 의미해, 기존에 cache 에 있던 data는 cache로 부터 읽어짐을 기억하자!

'Programming > Verilog' 카테고리의 다른 글

AXI Register Slice  (0) 2020.02.12
Verilog Generate  (2) 2018.07.05
Xilinx bootgen  (0) 2017.06.21
Xilinx Vivado IP import  (0) 2017.05.31
Xilinx Vivado Project가 안 열릴때  (0) 2017.05.30

+ Recent posts