목표
현재 사용하고 있는 RTOS개발환경은 Windows에서 동작을 기본인데 Linux 에서 ARM ADS 컴파일 하는 것
Windows에서 Linux로 전환하기 위한 소스 및 빌드 수정사항
빌드환경관련해서는 3가지 단계로 진행하면 된다.
- Linux개발환경에 ARM ADS Compiler 설치
- PATH 및 ARM환경변수 설치
- windows 기반 toolchain을 수정없이 사용하기 위해서 wine을 통해 배치파일 수행
ADS 설치경로
Local 설치 또는 opt아래에 설치
공용설치 /opt/arm/linux/bin /opt/arm/linux/common/lib /opt/arm/linux/common/include |
로컬설치 ~/bin/ADSv1_2/Bin ~/bin/ADSv1_2/Include ~/bin/ADSv1_2/Lib |
wine | set LM_LICENSE_FILE=Z:\data\limjh\licenses\license.dat 또는 set LM_LICENSE_FILE=/opt/arm/licenses/license.dat 또는 set ARMLIB=Z:\opt\arm\common/lib set PATH=%PATH%;Z:\data\limjh\bin\ADSv1_2\Bin 또는 set PATH=%PATH%;Z:\opt\arm\linux\Bin |
linux | export LM_LICENSE_FILE=/data/limjh/licenses/license.dat |
사용하던 SDK에는 빌드환경을 설정하는 DOS용 batch파일을 사용하는데 다음과 같이 변경한다.
Common_Build_conf.bat수정사항 set GNUPATH=Z:/usr/bin;Z:/usr/sbin;Z:/sbin;Z:/bin |
ifeq ($(USE_HOST_SELECT), USE_LINUX) ifeq ($(USE_COMPVER_SELECT), USE_RVCT_3_1) ifeq ($(USE_HOST_SELECT), USE_LINUX) endif ifeq ($(USE_COMPMODE_SELECT),USE_THUMB_MODE) |
빌드
windows에서 사용하던 하되 wine 을 통해서 다음과 같이 수행한다.
echo build make | wine cmd |
또는 wine cmd build.bat make |
추가된
위와 같이 빌드를 하면 되는데
실제 적용할때는 WINE에서 빌드되는것과 Windows 에서 빌드되는것을 환경변수로 구분해서 커스마이징하고 빌드결과물에 대한 후처리를 위해서 최종 바이너리 가공까지 부분까지 추가했다.
set USE_HOST_SELECT=USE_LINUX cd ./Build/Target/MD7150P cp /data/jenkins/jobs/RTOS_MD7150P/workspace/Build/Base/MD7150P_LUCA_DebugRel.bin /data/jenkins/jobs/RTOS_MD7150P/workspace/Util/InputBinary/DTK_LUCA_DebugRel.bin cd /data/jenkins/jobs/RTOS_MD7150P/workspace/Util wine cmd /C build clean 2>/dev/null | tee /dev/null |
소스관련해서
역슬래쉬와 대소문자가 문제가 되며 , 빌드에서 오류가 나는 부분을 일괄적으로 변경하는 수작업이 필요하다.
시간이 많이 들어가는 작업을 마치고 원본과 수정본의 diff를 확보하면
다른 프로젝트에도 적용이 가능하다.
diff와 patch를 이용해서 다음과 같이 적용했다.
패치만들기 ORG 과 MOD diff -urN ORG MOD > test.diff |
적용하기 방법한가지 |
방법두가지 |
Tip
대소문자와 역슬레대소문자 구분 때문에 문제가 된다고 했는데 찾아보면 동일한 패턴이 많기 때문에 아래의 script로 일괄 수정한다. 단순 replace if [[ $# < 2 ]]; then BEFORE=$1 echo "[${BEFORE}] => [${AFTER}]" |
대소문자차이로 파일명을 수정해야하는 경우 Makefile.mk 를 makefile.mk 을 실제 파일명과 구분없이 사용하다 Linux에서는문제가 된다. find -type f -name "Makefile.mk" | sed -e 'p' -e 's/Makefile/makefile/g' | xargs -n 2 mv 단계는 3단계 1단계 find로 파일찾기 2단계 기존파일명과 변경할 파일명 준비하기 -e ‘p’ 기존파일명 -e ‘s/Makefile/makefile/g’ 치환하고 싶은 결과파일명 3단계 mv 또는 rename으로 파일명 변경하기 sed에서 넘겨준 문자를 방기 위해서 xargs 가사용된다. xargs –n 2 인자수를 2개로 조정. mv로 실행. |
Wine을 설치할때 정말 단순한 실수로 시간을 낭비한게 있는데 ttf-mscorefonts-installer 설정 중입니다 같은 사용자 입력 대기화면이 있는데 여기서 enter키를 아무리 누르거나해도 넘어가진 않는다. Tab 한번해서 focus이동하고 space bar를 살짝 눌러줘야 넘어간다. |
댓글