windows 2008 server 64 bit에서 32bit 프로그램을 실행 시켰을때 0xc000007b 에러가 발생을 하였을 경우

여러가지 해결방안이 구글링으로 검색 되었는데, 실제 해결이 된 방법은 다음과 같았다.

내가 만든 프로그램에서 사용하는 라이브러리의 의존성을 검사 하는 프로그램인 dependency walker라는 프로그램으로

먼저 확인 해서 해당 라이브러리를 변경해 주면 된다.

 

    [그림 1] 오라클 프로그램이 64bit로 설치가 되어서 컴파일 시 사용한 32bit 라이브러리와 호환이 되지 않아 에러 발생

 

Dependency Walker 다운로드는 다음 사이트에서 제공한다.

http://www.dependencywalker.com/ 

 

Posted by 다크쌍피

라즈베리 파이의 기본 키보드 레이아웃은 영국으로 설정이 되어 있어서, # 키를 누르면 £으로 표기가 된다.

이를 변경 하려면 /etc/default/keyboard 파일의 XKBLAYOUT="gb"를 "us"로 수정해 주면된다.

 

 

 # KEYBOARD CONFIGURATION FILE

 

# Consult the keyboard(5) manual page.

 

XKBMODEL="pc105"
XKBLAYOUT="us"
XKBVARIANT=""

 

Posted by 다크쌍피

 

 

Windows 7 부팅 시 갑자기 복구 창이 뜨고 계속 진행 상태만 표시 되고 복구가 안되는 경우가 있다.

이때 Windows를 새로 설치 해야 하나 고민이 되는데, 이경우 MBR이 깨져서 그런경우에는

윈도우즈 7 CD가 있으면 간단히 복구가 가능하다.

 

복구 과정은 다음과 같다.

 

1.Windows 7 CD로 부팅을 한다.

2.처음 설치 창이 뜨면, "Shift + F10" 을 누르면 도스 창이 뜬다.

 

 

3.도스창에서 "bcdboot c:\Windows /s c: /l ko-KR" 명령을 친다. (c:\Windows 폴더에 윈도우즈가 깔려 있다고 가정)

4.부팅파일이 만들어 졌다는 메시지가 뜬다.

5."exit" 명령으로 도스창을 닫는다.

6.설치창의 x 버튼을 눌러 설치를 취소하고 재부팅 한다.

 

Posted by 다크쌍피

Ultimate Packer for eXecutables 이하 UPX 는 실행파일을 실행가능하게 압축하여 사이즈를 줄여주는 프로그램으로 대상에 따라 다르겠지만 대부분 40프로 가량 줄여 주는것 같다. 요즘은 임베디드 시스템도 고사양으로 저장장치나 RAM사이즈가 커져서 굳이 사용할 일 이 없을 수도 있으나 저사양의 임베디드시스템에서는 100kb 용량도 비중이 클 수 있어서 이런 시스템에서 사용하면 유용한 프로그램이다.


UPX 장점

  1) 저장 장치의 저장공간 절약.

  2) RAM에서 로딩하는 사이즈도 줄 수 있어서 RAM 절약.

  3) Windows 32/64/CE, LInux, MAC, DOS, OpenBSD, NetBSD, AtariTOS/Mint, Playstation 1 등 거의 모든 실행 포맷 제공.


UPX 단점

  1) 크게 체감상 느껴지지 않지만 실행 속도가 약간 늦음.


UPX는 사이트내에서 기본적으로 미리 컴파일을 하여 실행 프로그램을 제공해주고 있으나 내가 사용하는 보드는 TI DM368 보드여서 Cross Compile을 해줘야 한다. 소스코드는 (http://upx.sourceforge.net/) 에서 다운로드가 가능하다. UPX를 컴파일 하기 위해서는 UCL 라이브러리가 필요하기 때문에 UCL 라이브러리를 먼저 컴파일 해야 하는데 UCL은 (http://www.oberhumer.com/opensource/ucl/) 에서 다운로드 가능하다. 


UCL 컴파일

host$ CC=/home/dark2pee/Project/ti-dvsdk_dm3730-evm_04_03_00_06/linux-devkit/bin/arm-arago-linux-gnueabi-gcc ./configure --host=arm-arago-linux-gnueabi --prefix=/home/dark2pee/temp/ucl


UPX 컴파일을 위해서 Makefile 수정 (./upx-3.91-src/src/Makefile)

#CXX = g++
CXX = /home/dark2pee/Project/ti-dvsdk_dm3730-evm_04_03_00_06/linux-devkit/bin/arm-arago-linux-gnueabi-g++

                                                           :

#UCL Path 추가

UPX_UCLDIR = /home/dark2pee/Project/upx/ucl-1.03


#LIBS += -lucl -lz
LIBS += $(UPX_UCLDIR)/src/.libs/libucl.a -lz


UPX 컴파일

host$ make all


UPX를 컴파일 하면 src 폴더에 upx.out이 생성 되고 이를 이용하여 실행 프로그램의 사이즈를 줄여 준다.


target$ ./upx.out  -1 TESTApp
                       Ultimate Packer for eXecutables
                          Copyright (C) 1996 - 2013
UPX 3.91        Markus Oberhumer, Laszlo Molnar & John Reiser   Sep 30th 2013
 
        File size         Ratio      Format      Name
   --------------------   ------   -----------   -----------

TESTApp  1/4  [****................................................]   25.2%  |

   6839883 ->   4367184   63.85%   linux/armel   TESTApp
 
Packed 1 file.


UPX Site : http://upx.sourceforge.net/

Posted by 다크쌍피

1.2 bootchart2

bootgraph가 Kernel 시작 부터 Init까지의 부팅과정을 분석한다면, bootchart2는 init 이후의 부팅 과정 및 CPU 사용률 및 디스크 사용률까지 분석 해준다. bootchart2를 사용하기 위해서는 다음과 같은 작업을 해야 한다.


1) 부팅 과정의 로그를 저장하는 데몬인 bootchartd를 busybox 컴파일 시 포함 시켜줘야 한다.

busybox # make menuconfig


 Init Utilities ---> [*] bootchartd

                      [*]   Compatible, bloated header

                      [*]   Support bootchartd.conf


2) u-boot의 boot parameter인 init=/sbin/init을 init=/sbin/bootchartd로 변경하고 printk.time=1 initcall_debug=1 를 추가 한다.

  ex> bootargs=noinitrd rootfstype=ubifs ubi.mtd=4 xxxxxxxxxxxxxxxxxx init=/sbin/bootchartd printk.time=1 initcall_debug=1


3) 부팅 후 /var/log 에 부팅 로그 파일인 bootlog.tgz 를 서버로 복사한다.


4) 개발 서버에서 bootchart2 소스코드를 다운로드 하여 컴파일 한다. ( https://github.com/mmeeks/bootchart/releases )

/usr/local/bootchart2/bootchart-0.14.7$ make



5) bootchart2 스크립트인 pybootchartgui.py 를 이용하여 부트 로그 파일인 bootlog.tgz 를 그래프화 한다.

  $ /usr/local/bootchart2/bootchart-0.14.7/pybootchartgui.py bootlog.tgz


6) 결과

부팅 로그가 분석된 bootchart.png 파일이 생성 되고 이를 확인할 수 있다.





 


Posted by 다크쌍피

1. 개요

Embedded Llinux를 사용하는 많은 장치들이 부팅속도를 줄이려고 많은 노력을 한다. 요즘은 Zero-Boot, 혹은 Super-FastBoot 등과 같이 메모리 덤프작업을 통해서 전원 인가 후 1초만에 어플리케이션이 실행 되도록 하는 기술이 이슈가 되고 있는데, 여러 모듈과 연동하고 있는 산업용 장비 같은 경우, 초기화 시에 모듈의 이상유무를 검증해야 해서 이런 기술이 적용되기 힘든경우가 존재한다. 이런경우 순수하게 리눅스의 부팅 시 사용하지 않는 모듈을 제거 하거나 다른 모듈로 대체 해나가면서 최적화 하는 방법이 필요 한데 이런경우에 사용하면 유용한 툴이 bootgraphbootchart2를 이용하는 방법이다.


bootgraph 와 bootchart2는 부팅 과정을 시간별로 그래프화 하여 모듈의 부팅 시 시작 시점 및 실행 시간을 알 수 있도록 기능을 제공 한다.


1.1 bootgraph

bootgraph 는 Linux Kernel Source에 포함된 perl script로 Linux Kernel Source/scripts/bootgraph.pl 로 존재 한다.

bootgraph를 사용해서 부팅 과정을 분석 하기 위해서는 다음과 같은 작업을 해야 한다.


  1) Kernel Config 내용 중 CONFIG_PRINTK_TIME, CONFIG_KALLSYMS 을 Enable 시켜줘야 한다.

  2) Kernel Config 내용 중 버퍼 오버플로어를 대비해서 CONFIG_LOG_BUF_SHIFT 를 14 에서 18 로 변경한다.

  3) u-boot의 boot prameter에 "printk.time=1 initcall_debug=1"를 추가 한다.

      ex> bootargs=noinitrd rootfstype=ubifs ubi.mtd=4 xxxxxxxxxxxxxxxxxx printk.time=1 initcall_debug=1


내용적용 후 Kernel Booting Log용

[    0.000000] Linux version 2.6.39.1 (dark2pee@dev-ubuntu) (gcc version 4.3.3 (GCC) ) #53 Wed Jul 2 11:01:05 KST
[    0.000000] CPU: ARMv7 Processor [413fc082] revision 2 (ARMv7), cr=10c53c7f
[    0.000000] CPU: VIPT nonaliasing data cache, VIPT aliasing instruction cache
[    0.000000] Machine: OMAP3 SIO
[    0.000000] Reserving 4194304 bytes SDRAM for VRAM
[    0.000000] Memory policy: ECC disabled, Data cache writeback
[    0.000000] OMAP3630 ES1.2 (l2cache iva neon isp 192mhz_clk )

                                    :

[    0.039642] CPU: Testing write buffer coherency: ok
[    0.039855] calling  spawn_ksoftirqd+0x0/0x50 @ 1
[    0.039916] initcall spawn_ksoftirqd+0x0/0x50 returned 0 after 0 usecs
[    0.039947] calling  init_workqueues+0x0/0x250 @ 1


  4) 부팅 완료 후 부팅 로그를 dmesg 를 이용하여 저장한다.

target# dmesg > /tmp/bootlog


 5) 저장된 bootlog를 개발서버로 복사 하여 bootgraph 스크립트를 이용하여 그래프화 한다.

server$ cat bootlog | perl /linux-kernel-xxxxx/scripts/bootgraph.pl > bootlog.svg 


6) 결과

해당 모듈의 부팅 시간을 확인 하여 필요 없는 부분을 삭제 한다.


 



Posted by 다크쌍피

U-Boot 컴파일 시 arm-arago-linux-gnueabi-ld:/home/SourceCode/u-boot/spl/u-boot-spl.lds:1: syntax error

에라가 발생하면서 컴파일이 안될 경우는 home/SourceCode/u-boot/include/configs/davinci_dm365evm.h 파일에

주석 처리를 // 로 하지 않았는지 확인한다. 반드시 주석 처리는 c 스타일인 /* */ 로 처리 해야 한다.

Posted by 다크쌍피

s5pv210 ICS 4.x 의 default.prop에 내용을 추가 하고 싶을때는


ics/device/samsung/smdkv210/device.mk 파일에 내용을 아래와 같은 형식으로 추가 해주면 된다.



PRODUCT_PROPERTY_OVERRIDES += \
    ro.sf.lcd_density=160 \
    ro.opengles.version=131072

# Set default USB interface
#  ++ dark2pee
PRODUCT_DEFAULT_PROPERTY_OVERRIDES += \
        persist.sys.usb.config=mass_storage,mtp

PRODUCT_PROPERTY_OVERRIDES += \
        hwui.render_dirty_regions=false


Posted by 다크쌍피

삼성 s5pv210 칩을 사용하는 마이크로 비젼의 MVV210에서 mtp_usb USB Gadget을 사용하기 위해서는 부팅 초기화


명령어에 권한을 바꿔 줘야 한다. SD Card에 부트로더와 커널을 사용하는 MVV210 ICS에서는


ics/device/samsung/smdkv210/init.smdkv210_sdmmc.rc 파일을 아래와 같이 수정해 주면 된다.



                   :

on boot
    mount debugfs /sys/kernel/debug /sys/kernel/debug
    chmod 0666 /dev/pvrsrvkm
        setprop ro.build.product smdkv210
        setprop ro.product.device smdkv210

    chmod 0666 /sys/class/backlight/pwm-backlight.0/brightness
    chown system system /sys/class/backlight/pwm-backlight.0/brightness
    #dark2pee Init (sys.usb.config value is writen in default.prop)
    chmod 777 /dev/mtp_usb
    chown root /dev/mtp_usb

                     :


Posted by 다크쌍피

삼성의 s5pv210칩의 안드로이드 4.x USB 디바이스 가젯 초기화 스크립트인 /init.smdkv210.usb.rc 를 수정하려면


ICS 소스 디렉토리인 /ics/device/samsung/smdkv210/init.smdkv210.usb.rc 를 수정하면 된다 property를 추가 하려면 아래와


같이 추가 해주면 된다.(mtp 추가)



on boot
    write /sys/class/android_usb/android0/iManufacturer $ro.product.manufacturer
    write /sys/class/android_usb/android0/iProduct $ro.product.model
    write /sys/class/android_usb/android0/iSerial $ro.serialno
    write /sys/class/android_usb/android0/f_mass_storage/inquiry_string "Android  Mass Storage"
    write /sys/class/android_usb/android0/f_rndis/manufacturer Samsung
    write /sys/class/android_usb/android0/f_rndis/vendorID 04e8
    write /sys/class/android_usb/android0/f_rndis/wceis 1

on property:sys.usb.config=mass_storage
    write /sys/class/android_usb/android0/enable 0
    write /sys/class/android_usb/android0/idVendor 18d1
    write /sys/class/android_usb/android0/idProduct 4e21
    write /sys/class/android_usb/android0/functions $sys.usb.config
    write /sys/class/android_usb/android0/enable 1
    setprop sys.usb.state $sys.usb.config

on property:sys.usb.config=mass_storage,adb
    write /sys/class/android_usb/android0/enable 0
    write /sys/class/android_usb/android0/idVendor 18d1
    write /sys/class/android_usb/android0/idProduct 4e22
    write /sys/class/android_usb/android0/functions $sys.usb.config
    write /sys/class/android_usb/android0/enable 1
    start adbd
    setprop sys.usb.state $sys.usb.config

on property:sys.usb.config=rndis
    write /sys/class/android_usb/android0/enable 0
    write /sys/class/android_usb/android0/idVendor 04e8
    write /sys/class/android_usb/android0/idProduct 6863
    write /sys/class/android_usb/android0/functions $sys.usb.config
    write /sys/class/android_usb/android0/bDeviceClass 224
    write /sys/class/android_usb/android0/enable 1
    setprop sys.usb.state $sys.usb.config

on property:sys.usb.config=rndis,adb
    write /sys/class/android_usb/android0/enable 0
    write /sys/class/android_usb/android0/idVendor 04e8
    write /sys/class/android_usb/android0/idProduct 6864
    write /sys/class/android_usb/android0/functions $sys.usb.config
    write /sys/class/android_usb/android0/bDeviceClass 224
    write /sys/class/android_usb/android0/enable 1
    start adbd
    setprop sys.usb.state $sys.usb.config

#===================================================================
# dark2pee USB Device
#===================================================================
on property:sys.usb.config=mass_storage,mtp,adb
    write /sys/class/android_usb/android0/enable 0
    write /sys/class/android_usb/android0/idVendor 18d1
    write /sys/class/android_usb/android0/idProduct 4e22
    write /sys/class/android_usb/android0/functions $sys.usb.config
    write /sys/class/android_usb/android0/enable 1
    start adbd
    setprop sys.usb.state $sys.usb.config



Posted by 다크쌍피