'Embedded'에 해당되는 글 11건
- 2023.11.16 NXP i.mx.8 v4.14.98-2.3.3 에서 debug symbol 추가할 때, linux-imx compile error
- 2022.07.18 i.mx yocto project using kernel v4.14.98
- 2022.07.05 Tera Term 을 사용하면서, log 화일 이름 설정
- 2022.02.15 i.mx8 yocto linux 에서 MAC 주소를 설정하는 방법 1 (uboot)
- 2016.12.28 svn에서 git으로 이사가기
- 2014.04.27 TI Code Composer Studio v5 or v6 의 Editor tab width 변경
- 2011.06.23 Cadence SPB 16.5 설치하기 (한글) 25
- 2008.11.03 AVR ATmega168V를 사용하는 것은 개발 마무리 중
- 2008.10.31 AVR GPIO와 LED 제어 - 실수 하나
- 2008.10.30 AVR debug-WIRE - 나중을 기약
NXP i.mx.8 v4.14.98-2.3.3 에서 debug symbol 추가할 때, linux-imx compile error
https://developer.ridgerun.com/wiki/index.php/Preparing_Yocto_Development_Environment_for_Debugging
를 참고하여, image에 debug symbol을 추가할 때,
| CC drivers/acpi/ec.o | In file included from /data/nxp/i.mx.8/4.14.98-2.3.3/ap.4/tmp/work-shared/imx8mmevk/kernel-source/include/linux/kernel.h:15:0, | from /data/nxp/i.mx.8/4.14.98-2.3.3/ap.4/tmp/work-shared/imx8mmevk/kernel-source/drivers/acpi/ec.c:32: | /data/nxp/i.mx.8/4.14.98-2.3.3/ap.4/tmp/work-shared/imx8mmevk/kernel-source/drivers/acpi/ec.c:1998:38: error: passing argument 1 of '__check_old_set_param' from incompatible pointer type [-Werror=incompatible-pointer-types] | module_param_call(ec_event_clearing, param_set_event_clearing, param_get_event_clearing, | ^ | /data/nxp/i.mx.8/4.14.98-2.3.3/ap.4/tmp/work-shared/imx8mmevk/kernel-source/include/linux/build_bug.h:30:56: note: in definition of macro 'BUILD_BUG_ON_ZERO' | #define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:(-!!(e)); })) | ^ | /data/nxp/i.mx.8/4.14.98-2.3.3/ap.4/tmp/work-shared/imx8mmevk/kernel-source/include/linux/moduleparam.h:228:6: note: in expansion of macro 'VERIFY_OCTAL_PERMISSIONS' | VERIFY_OCTAL_PERMISSIONS(perm), level, flags, { arg } } | ^~~~~~~~~~~~~~~~~~~~~~~~ | /data/nxp/i.mx.8/4.14.98-2.3.3/ap.4/tmp/work-shared/imx8mmevk/kernel-source/include/linux/moduleparam.h:234:2: note: in expansion of macro '__module_param_call' | __module_param_call(MODULE_PARAM_PREFIX, \ | ^~~~~~~~~~~~~~~~~~~ | /data/nxp/i.mx.8/4.14.98-2.3.3/ap.4/tmp/work-shared/imx8mmevk/kernel-source/drivers/acpi/ec.c:1998:1: note: in expansion of macro 'module_param_call' | module_param_call(ec_event_clearing, param_set_event_clearing, param_get_event_clearing, | ^~~~~~~~~~~~~~~~~ | In file included from /data/nxp/i.mx.8/4.14.98-2.3.3/ap.4/tmp/work-shared/imx8mmevk/kernel-source/include/linux/module.h:18:0, | from /data/nxp/i.mx.8/4.14.98-2.3.3/ap.4/tmp/work-shared/imx8mmevk/kernel-source/drivers/acpi/ec.c:33: | /data/nxp/i.mx.8/4.14.98-2.3.3/ap.4/tmp/work-shared/imx8mmevk/kernel-source/include/linux/moduleparam.h:240:1: note: expected 'int (*)(const char *, struct kernel_param *)' but argument is of type 'int (*)(const char *, const struct kernel_param *)' | __check_old_set_param(int (*oldset)(const char *, struct kernel_param *)) | ^~~~~~~~~~~~~~~~~~~~~ ... |
이렇게 오류가 발생하였다. 찾아 보니,,
linux-imx 컴파일 도중에 발생한 것으로, linux kernel 의 include/linux/moduleparam.h 화일에서 line 236 에 문제가 있다. 다음과 같이 [ perm, ] 으로 변경하면 문제가 해결된다.
오류 메시지를 정확하게 바라보고 이해했더라면, 쉽게 찾았을 수 있었을 텐데, 계속 구글에 물어 보고, 다른 것만 찾다가 2일의 시간을 낭비했다.
설명이 두서없지만, 혹시나 도움이 되기를 바라며,
i.mx yocto project using kernel v4.14.98
yocto project를 사용하여 rootfs 을 만들고 있다.
사정상 kernel version을 낮추어야 하여, 새로 repository를 만들려고 시도하는데,
$ repo init -u https://source.codeaurora.org/external/imx/imx-manifest -b imx-linux-sumo -m imx-4.14.98-2.3.3.xml
(v4.14.98-2.3.3 이 최신)
이렇게 오류가 발생한다.
해결책은,
$ git config --global url."https://".insteadOf git://
$ repo sync
Fetching: 100% (9/9), done in 31.414s
Garbage collecting: 100% (9/9), done in 0.029s
Checking out: 100% (9/9), done in 0.882s
repo sync has finished successfully.
$
이것이었습니다. 잊지 않기 위해 기록합니다.
https://stackoverflow.com/questions/15669091/bower-install-using-only-https
Tera Term 을 사용하면서, log 화일 이름 설정
Tera Term 은 open source terminal tool로 꽤나 쓸만하다.
여러 포트를 사용하여 시험하다 보니, logging 을 하는데, 포트에 따른 log file을 자동으로 설정할 수 있다.
Setup --> Additional Setings...
창에서 "default log file name(strftime format)" 이름을
&h&p %Y-%m-%d %H_%M_%S.log
이렇게 설정하면 된다.
아래의 Auto start logging을 [v] 하면, port 가 열릴 떄 자동으로 생성된다.
설정하고 나니 편하구만.
i.mx8 yocto linux 에서 MAC 주소를 설정하는 방법 1 (uboot)
워낙 간단한 것이라서 설명할 것도 없겠지만, h/w적으로 MAC rom 이 없거나, u-boot에서 MAC을 설정해 놓지 않으면,
보통 kernel에서 random 하게 MAC 주소를 만들어서 ethernet device를 구동하게 된다.
이렇게 되면, DHCP를 할 때, 매번 IP 주소가 변경되어, 여간 불편한 것이 아니다.
이를 피하려면, u-boot 에 MAC 주소를 설정하면 된다. 설정 방법은,
u-boot> setenv ethaddr "nn:nn:nn:nn:nn:nn"
u-boot> saveenv
이렇게 ethaddr를 설정하면, 커널에서 uboot 의 ethaddr 을 읽어서 ethernet device를 구동한다.
커널에서는 임의의 명령으로 다시 변경할 수도 있다.
간단한 것인데도, 찾으려면 수고스러움이 있어서 정리해서 올린다.
혹시 다른 사항이 필요하면, 여기를 보는 것도 좋겠다. (kernel 구성 관련)
svn에서 git으로 이사가기
주로 local svn 저장소를 만들어서 작업을 했었는데,
이참에 git으로 변경하고자 하는데.... 저장소를 clone해서 해야 연관성이 유지된다.
clone 할 때 local repository를 지정할 때,
file:///d/svn/crios
이런식으로 지정하면 된다.
이것 몰라서, 몇번 삽질함...
TI Code Composer Studio v5 or v6 의 Editor tab width 변경
TI Code composer Studio v5 에서 v6으로 바꿨다.
loading 속도가 조금 빨라진 듯 하다.
tab width 바꾸는 것으로 또 잊었다.. 도통 그냥 찾아갈 수가 없다니깐.
v6에서는 "New"를 누르지 않고, 아예 "Edit" 만으로 수정이 되었다.
진작에 그렇게 할 것이지...
추가: C/C++ 항목이 보이질 않는다? 그럼 아래에 "Show advanced settings" 를 눌러주면 보인다.
끝.
Cadence SPB 16.5 설치하기 (한글)
OrCAD가 Cadence로 가더니, PCB 쪽에 많이 보강이 되어 강력해 진 것 같다.
최신 버전인 16.5의 설치 방법을 간략하게 설명한다. (찾기기 쉽지 않음)
Iso 파일의 readme는 완전히 알기 어려운 언어로 되어 있어서, 이해가 불가능했는데, 다행히 다음 사이트에서 영어 번역문을 제공하였다.
http://www.sonsivri.com/forum/index.php?topic=38575.0;topicseen
내용을 그대로 첨부하면,
Hello Folkeu, this "Translation" is generate with "Im Translator" from Cyrillic to English. Enjoy!
1. Install the license manager (License Manager) and program (Cadence SPB 16.5). Window asking you to leave the license file is empty.
2. Cadence contents of the folder from the folder Aspirin copy of this the same with the installed programs (if you have not changed the name of the default folders in the first step).
3. Change into the folder CadenceLicenseManager. Find and run it the script LicenseManager.cmd
4. Change into the folder CadenceSPB_16.5 tools. Find and run it the script Tools.cmd. The script runs from 1 to 5 minutes depending on your computer's performance.
5. Change into the folder CadenceLicGen. Change any text editor in the first storoke src.lic file name this-host to the real name of your computer. Save the file.
6. Find and run it the same script LicGen.cmd. Will generate a license file license.lic.
7. Run the configuration program license server: "Start -> Programs -> Cadence -> License Manager -> License Server Configuration Utility" as a license file to indicate the generated file in the previous step. Double click Next - should have a diagnostic message about the successful launch of the license server.
에서 바로 전에 만든 "license.lic" 파일을 지정하고, "Next" 누릅니다.
7.1 execute lmtools <Tab: Config Service> Set lmgrd.exe Set license file Check <Use Service> Check <Start Server at Power Up>
7.2 혹시나 해서 추가하면, Service Name "Flexlm Service 1" 이라고 되어 있는 서비스를 실행합니다.
8. EVERYTHING! Enjoy:). |
내용 중에서 7.1은 내가 추가하였다. 설치된 환경은 Windows 7 x64 이다.
아마도 7.1의 과정이 필요한 이유가, 나는 설치 폴더는 기본으로 하지 않고, c:\opt 에 하기 때문에 필요한 듯 하다.
여하튼 도움이 되길바라며…
P.S: FlexLm Service 1 은?
이렇게 되어 있군요. 언제 설치되었는지는 까먹었어요…
우선 이것이 컴퓨터의 서비스로 등록되어 있어야 하고요.
이런 상태에서 "lmtools" 를 실행했을 때,
우선 없었을 수도 있겠군요. 없더라도, Configuration using Services 로 선택함.
그리고, "Config Services" 로 가서 설정 (아마도)
AVR ATmega168V를 사용하는 것은 개발 마무리 중
별로 도움이 될 만한 내용을 작성하지도 않았는데, 벌써 언급할 만한 게 없다.
debugWIRE 전환 시험하느라고 망가졌던 것 - 총 4개는 다시 시험해 보니, 여전히 동작하지 않았다.
그냥 포기하기로 하였다. - 시간 낭비인 듯.
나중에 시간되면, FAE에게 보내 봐야 겠다.
작은 MCU이다 보니, 참 쉽고 빠르게 진행되었던 것 같다.
AVR 쓰면서 좋은 것 하나는 Internal RC OSC가 있어서 별도로 XTAL을 달지 않아도 된다는 것이다.
처음에 10MHz XTAL 짜리 붙였다가 모두 떼었다. 큰 장점인 듯.
그런데, AVR내의 Flash 정보는 security 기능이 있는 걸까? 양산 전에 확인해 볼 사항이다.
(복제 방지에는 필수품)
AVR GPIO와 LED 제어 - 실수 하나
코드를 넣고 돌렸는데, 아무런 반응도 없습니다.
결국 device 초기화 루틴을 모두 삭제하고 (AVR MCU의 RESET 이후 초기 모드로), 동작시키니 LED가 켜지면서 정상 동작하는 군요.
나중에 FAE와 통화하면서 알게 된 것인데, 실수가 있었더군요. (LED 제어시 Low On으로 사용)
초기화 코드 중에서
MCUCR |= (1<<PUD);
부분이 있는데, 이것이 GPIO 사용 방법에 문제가 있었더군요.
이 부분을 삭제하니깐 모두 정상동작하는 군요. 분명 이전에는 이 코드와 관계없이 동작하였었는데 말이죠...
AVR GPIO에 LED를 연결하여 사용하려면, AVR GPIO - LED - pull-up register - VCC 순으로 연결하여야 합니다.
그런데 지금 보드에서는 AVR GPIO - register - LED - GND 순으로 연결하였습니다.
LED를 ON 시키기 위해서는 AVR GPIO를 OUTPUT_HIGH 상태로 제어해야 하는데, AVR internal pull-up을 제거하고 하면, 이 line에 전류가 많이 흐르게 되어 아마도 AVR이 정상적으로 동작하지 않는 듯 하더군요.
나중에는 꼭 LED 제어를 Low active로 해야 겠더군요.
결국은 internal pull-up enable 상태로 모두 정상 동작합니다.
참고로 LED 밝기가 형편없습니다. 겨우 켜져있다는 것을 알 정도입니다.
코드 한 줄에 먹통이 되니, 조심 또 조심 해야 겠습니다.
AVR debug-WIRE - 나중을 기약
ATmeag168V는 chip이 너무 작다 보니 그 흔한 JTAG 하나 없더군요.
대신에 debug-WIRE 라는 것이 있더군요. AVR JTAGICE mkII 장비가 있어야만 사용할 수 있구요.
다행인지 불행인지 장비가 있는 관계로 시도해 보기로 하였습니다.
그런데 이게 복병이었습니다. 후회 막급입니다.
AVR ISP 모드로 연결이 잘 된 것을 확인한 후, DWEN enable을 했습니다.
그리고, AVR JTAGICE mkII와 RESET, Vcc, GND 만을 연결하였습니다.
Error - RESET 라인에 문제가???
datasheet를 읽어보니, RESET 라인의 pull-up을 10k ohm 이상 달라는 군요 그리고 C도 달지 말라는 군요.
뭐 재주가 없으니, 하라는 대로 해야죠. pull-up 바꾸고, C는 떼어냈습니다.
오호 debug-WIRE 연결이 되었습니다.
AVRStudio4로 debug binary올려서 연결했습니다.
Code 화면까지 나와서 RUN 해 보았습니다.
뭔가 돌아가는 것 같은데, 알 수가 없군요.
막상 동작하는 것을 보니, 시간이 좀 걸리는 모드인 것 같군요.
다시 AVR ISP 모드로 전환하려면, AVR ISP 라인을 모두 연결하여야 한다는 군요.
모두 연결하고, disable debugg-WIRE button을 눌렀습니다.
메시자가 뜨는 군요. "disable debug-WIRE를 설정한 후에, ISP 모드로 전환된 것을 확인한다" 고 하는데, 확인이 안된다는 error가 발생하였습니다.
난감...
이제 이 보드는 debug-WIRE 모드나, AVR ISP 모두 둘 다 안되는 군요.
결국 보드 3장 날리고, 포기하기 까지 3시간 걸렸습니다.
(모드 전환을 위해서는 pull-up과 C를 떼었다 붙였다. H/W하는 친구에게 미안했습니다.)
나중에 시간나면 debug-WIRE를 제대로 함 해 볼까 합니다.
여하튼 결국은 ISP로 갑니다.
AVR FAE 왈, debug-WIRE 안 써 봤는데요. 그냥 ISP로 합니다.... 더 군요..
AVR 사용하는 사람들이 AVR ISP 사서 하는게 대부분이 겠더군요. (가격이 싸니까요)
쓸데없이 보내버린 3시간 어디에 하소연할 데도 없군요.
몇 가지 언급하면, (앞의 XTAL도 연관이 있을 듯)
1. 먼저 ISP 모드에서 XTAL 설정을 명확하게 하고 동작을 확인 한 후에 debug-WIRE 전환 시험을 한다.
2. debug-WIRE / ISP를 사용하려면, RESET line의 pull-up을 10k ohm 이상을 단다. (C는 달지 않는다)
(다른 device와 RESET 라인을 공유하는 것은 바람직하지 않다.)