embeded/ARM2015. 8. 26. 09:28

cortex-m3만 사용했는데 문득 M0 라던가 다른 모델군이 있는게 생각이 나서 검색..

일단은.. cortex-m3 는 그래도 나름! 풀 스펙에 가까운 표준형 cortex-m 시리즈라고 보면

M0는 숫자가 적은 만큼 마이너 버전이다.

그리고 M0/M1은 M3와 다르게 ARMv6 계열.. ㄷㄷㄷ

또한 Thumb 호환성도 조금 더 낮고(그래서 저전력/gate 수가 적다고)

결정적으로.. Hardware divider가 제외되어있다. 그나마 Hardware multiplier가 있는게 다행인가..


조금.. 의아한건..

M3/4/7이 Harvard 아키텍쳐인데 반해

M0/1은 폰 노이만으로의 회귀...


[링크 : https://en.wikipedia.org/wiki/Von_Neumann_architecture]

[링크 : https://en.wikipedia.org/wiki/Harvard_architecture]


[링크 : https://en.wikipedia.org/wiki/ARM_Cortex-M]


그런데 보다 보니 Saturated math라는게 보여서 링크를 따라가니.. 오홍.. 좋아 보이는데?!?!?!

간단하게 설명하면 더 큰 변수로 캐스팅, 계산 값 범위 비교, 클 경우 최대값 넣기

이 세가지를 한방에 끝내주는 연산이다. overflow로 인한 예측하지 못한 값에 의한 오류도 막아주고(물론 오차는 존재하지만)

if문에 의한 branch를 줄여주는 부분에서 상당한 장점이 있을 것으로 보인다.

[링크 : https://en.wikipedia.org/wiki/Saturation_arithmetic]

[링크 : http://www.arm.com/products/processors/cortex-m/]

'embeded > ARM' 카테고리의 다른 글

arm11 simd instruction  (0) 2015.10.01
cortex-A5/A7  (0) 2015.09.21
ARM926EJ / ARMv5TE  (0) 2015.07.28
Jazelle 관련 검색  (0) 2015.04.28
ltib 패키지 요구사항  (0) 2015.04.13
Posted by 구차니
embeded/ARM2015. 7. 28. 17:53

CPU 패밀리(?)는 EJ

아키텍쳐는 TE


ARM926EJ-S

Architecture ARMv5TE

The ARM926EJ-S processor implements the ARMv5TEJ instruction set 

[링크 : http://www.arm.com/products/processors/classic/arm9/arm926.php]

[링크 : https://en.wikipedia.org/wiki/ARM9]


근데 ARM 홈페이지에서도 페이지 별로 ARMv5TE와 ARMv5TEJ 를 섞어 쓰는건 함정.. ㄷㄷㄷ



TEJ라는 녀석도 구글에서 검색은 되는데 레퍼런스로 쓸만한건 안보이는 듯..


Integrated Modem + Applications

OMAP710 ‐ ARM925 + GSM/GPRS

OMAP730 ‐ ARM926TEJ + GSM/GPRS

OMAP733 ‐ ARM926TEJ + GSM/GPRS

OMAP750 ‐ ARM926TEJ + GSM/GPRS

OMAP850 ‐ ARM926TEJ + EDGE

OMAPV1030 ‐ ARM926TEJ + GSM/GPRS/EDGE

OMAPV1035 ‐ ARM926EJ + GSM/GPRS/EDGE

[링크 : http://www.wdic.org/w/WDIC/OMAP]

'embeded > ARM' 카테고리의 다른 글

cortex-A5/A7  (0) 2015.09.21
cortex-m 시리즈와 포화연산  (0) 2015.08.26
Jazelle 관련 검색  (0) 2015.04.28
ltib 패키지 요구사항  (0) 2015.04.13
jffs2 on sd card  (0) 2015.04.09
Posted by 구차니
embeded/ARM2015. 4. 28. 10:00

jazelle 가속이 ARMv7 부터 사라진거 봐서는 의미가 없는거 같긴한데

Yes Dalvik makes Jazelle useless. The only question is was Jazelle useful to begin with or is it 90% marketing hype? A good JIT or AOT(ahead of Time) compiler tends to give much better performance than trying to use specialized instructions. The register based approach of Dalvik might be faster than a traditional java bytecode interpreter but if the difference in minor between that of an interpreter and that of a JIT. Hopefully one of the next versions of Android has a JIT.


It takes ~5-10 years to write a good virtual machine with state of the art garbage collectors and optimizers. Sun (and Microsoft) have spent those years. Google hasn't. Hopefully they will keep investing in it so that one day Android Java code isn't a 90% slower than it should be.

[링크 : http://stackoverflow.com/questions/1153076/does-android-castrate-the-arms-jazelle-technology] 


결론은.. 실제적으로 실패한 기술이려나?

There are (at least) 4 different ways of executing Java:


1. interpretation

2. direct hardware execution

3. JIT compilation

4. AOT compilation


In order to answer your question of whether an ARM core with Jazelle

would improve performance you first need to state what you are

currently using, which core and what speed. If you use an interpreter,

anything will give a good speedup.


Note there are 2 versions of Jazelle: DBX which executes byte codes

directly (various ARM9's and all ARM11's support this). This gives

around 4x speedup over interpretation and has no memory or startup

overheads. There is also an optimizer which can improve performance

at runtime. However rather than generating native instructions like a

JIT, it optimizes the bytecode itself.


Jazelle-RCT supports either JIT or AOT compilation into the Thumb-2EE

instruction set (Cortex-A8/Cortex-A9). This gives near native performance

but when using a JIT you get the usual startup and memory overheads

(although far less than when using x86 due to ARM's better code density).


[링크 : http://www.embeddedrelated.com/showthread/comp.arch.embedded/109371-1.php] 


[링크 : http://en.wikipedia.org/wiki/Jazelle]

[링크 : http://en.wikipedia.org/wiki/Ahead-of-time_compilation]

[링크 : http://en.wikipedia.org/wiki/Just-in-time_compilation]

'embeded > ARM' 카테고리의 다른 글

cortex-m 시리즈와 포화연산  (0) 2015.08.26
ARM926EJ / ARMv5TE  (0) 2015.07.28
ltib 패키지 요구사항  (0) 2015.04.13
jffs2 on sd card  (0) 2015.04.09
sd 메모리 카드 블럭 사이즈  (0) 2015.04.09
Posted by 구차니
embeded/ARM2015. 4. 13. 23:20

음.. rpm이 요구사항이라.. 우분투에서는 조금 빡센건가..

그나저나.. 저런거 깔아도 경로 문제는 해결이 안되는거 같던데.. 끄응...



[링크 : http://ltib.org/documentation-LtibFaq#ref_10]


sudo apt-get install gettext libgtk2.0-dev rpm bison m4 libfreetype6-dev

sudo apt-get install libdbus-glib-1-dev liborbit2-dev intltool

sudo apt-get install ccache ncurses-dev zlib1g zlib1g-dev gcc g++ libtool

sudo apt-get install uuid-dev liblzo2-dev

sudo apt-get install tcl dpkg

sudo apt-get install texinfo

sudo apt-get install texlive


[링크 : http://forum.falinux.com/zbxe/index.php?document_srl=785246&mid=lecture_tip]

[링크 : http://forum.falinux.com/zbxe/index.php?document_srl=785398&mid=lecture_tip]

'embeded > ARM' 카테고리의 다른 글

ARM926EJ / ARMv5TE  (0) 2015.07.28
Jazelle 관련 검색  (0) 2015.04.28
jffs2 on sd card  (0) 2015.04.09
sd 메모리 카드 블럭 사이즈  (0) 2015.04.09
mkfs.jffs2 압축없이 사용하기  (0) 2015.04.08
Posted by 구차니
embeded/ARM2015. 4. 9. 10:00

전반적으로...

SD card에 JFFS를 쓰는건 듣도 보도 못한 이야기다! 라는 느낌 -_-

아.. 앙대 ㅠㅠ


일부 SD 메모리에는 자체적으로 wear leveling을 지원한다고 하니..

그런걸 쓰고 noatime 정도가 한계이려나?


[링크 : http://lists.rocketboards.org/pipermail/rfi/2014-October/002413.html]

[링크 : http://superuser.com/questions/248078/choice-of-filesystem-for-gnu-linux-on-an-sd-card]

[링크 : http://wiki.openmoko.org/wiki/FileSystem_microSD_cards]

'embeded > ARM' 카테고리의 다른 글

Jazelle 관련 검색  (0) 2015.04.28
ltib 패키지 요구사항  (0) 2015.04.13
sd 메모리 카드 블럭 사이즈  (0) 2015.04.09
mkfs.jffs2 압축없이 사용하기  (0) 2015.04.08
bogoMIPS가 너무 낮게 나오네  (0) 2015.03.03
Posted by 구차니
embeded/ARM2015. 4. 9. 09:16


sd 메모리를 jffs2용으로 포맷하려다 보니

eraseblock 이라는 옵션에 넣을 블럭 사이즈를 검색..

일단 샌디스크에서는 512 바이트 인 것 같은데..


예제로 나온게 128KB(0x2000) 인 것 봐서는 Flash에서만 가능한듯 하다.



[링크 : http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Components/General/SDSpec.pdf]

'embeded > ARM' 카테고리의 다른 글

ltib 패키지 요구사항  (0) 2015.04.13
jffs2 on sd card  (0) 2015.04.09
mkfs.jffs2 압축없이 사용하기  (0) 2015.04.08
bogoMIPS가 너무 낮게 나오네  (0) 2015.03.03
arm7l softfp hardfp fmac  (0) 2015.02.28
Posted by 구차니
embeded/ARM2015. 4. 8. 17:06

mkfs.jffs2 옵션에 -x를 주면 압축을 안하는 듯?

jffs2를 압축하면 실시간으로 계속 압축 / 해제 하니까 저사양 cpu에서는 무리가 올테니..

나중에 한번 부팅속도 라던가 벤치마크 해보거나

벤치마크 결과를 찾아봐야겠다.


       -m, --compression-mode=MODE

              Set  the  default compression mode. The default mode is priority

              which tries the compressors in a predefinied order  and  chooses

              the  first successful one. The alternatives are: none (mkfs will

              not compress) and size (mkfs will try all compressor and chooses

              the one which have the smallest result).


       -x, --disable-compressor=NAME

              Disable  a  compressor.  Use  -L to see the list of the avaiable

              compressors and their default states.


       -X, --enable-compressor=NAME

              Enable a compressor. Use -L to see  the  list  of  the  avaiable

              compressors and their default states.


       -y, --compressor-priority=PRIORITY:NAME

              Set  the priority of a compressor. Use -L to see the list of the

              avaiable compressors and their default priority.  Priorities are

              used by priority compression mode.


       -L, --list-compressors

              Show the list of the avaiable compressors and their states.


       -t, --test-compression

              Call  decompress  after  every compress - and compare the result

              with the original data -, and some other check.

[링크 : http://manpages.ubuntu.com/manpages/saucy/man1/mkfs.jffs2.1.html] 


[링크 : http://en.wikipedia.org/wiki/JFFS2]


[링크 : http://elinux.org/images/9/9a/CELFJamboree29-FlashFS-Toshiba.pdf] jffs2 / yaffs / ubifs 벤치마크

[링크 : http://www.denx.de/wiki/view/DULG/RootFileSystemOnAJFFS2FileSystem] 만드는 법

'embeded > ARM' 카테고리의 다른 글

jffs2 on sd card  (0) 2015.04.09
sd 메모리 카드 블럭 사이즈  (0) 2015.04.09
bogoMIPS가 너무 낮게 나오네  (0) 2015.03.03
arm7l softfp hardfp fmac  (0) 2015.02.28
밑바닥에서 rootfs 생성하기  (0) 2015.02.26
Posted by 구차니
embeded/ARM2015. 3. 3. 23:36

그래도. 라즈베리 파이 2 이녀석

Cortex-A7 700Mhz~900MHz 작동하는 녀석인데

700MHz 치고는 너무 낮은 36MHz 정도의 bogoMIPS를 출력한다.

이상해서 찾아보다 보니


"무한루프(busy-wait loop)가 아닌 타이머 기반의 딜레이를 이용하여 udealy() 함수를 사용함으로서

cpu의 부하를 줄이고 프로세서의 클럭 변경시에 강인하도록 변경되었고 부팅시에 calibration이 필요없어 졌지만

역효과로 bogoMIPS를 측정할때 CPU 클럭이 측정이 되는게 아닌 타이머 클럭이 측정되게 되는 문제가 발생했다."

정도?

Timer-based delays

In 2012, ARM contributed a new udelay implementation allowing the system timer built into many ARMv7 CPUs to be used instead of a busy-wait loop.[8] Timer based delays are more robust on systems that use frequency scaling to dynamically adjust the processor's speed at runtime, as loops_per_jiffies values may not necessarily scale linearly. Also, since the timer frequency is known in advance, no calibration is needed at boot time.


One side effect of this change is that the BogoMIPS value will reflect the timer frequency, not the CPU's core frequency. Typically the timer frequency is much lower than the processor's maximum frequency, and some users may be surprised to see an unusually low BogoMIPS value when comparing against systems that use traditional busy-wait loops.


[링크 : http://en.wikipedia.org/wiki/BogoMips] 


ARM: 7452/1: delay: allow timer-based delay implementation to be selected

This patch allows a timer-based delay implementation to be selected by

switching the delay routines over to use get_cycles, which is

implemented in terms of read_current_timer. This further allows us to

skip the loop calibration and have a consistent delay function in the

face of core frequency scaling.


To avoid the pain of dealing with memory-mapped counters, this

implementation uses the co-processor interface to the architected timers

when they are available. The previous loop-based implementation is

kept around for CPUs without the architected timers and we retain both

the maximum delay (2ms) and the corresponding conversion factors for

determining the number of loops required for a given interval. Since the

indirection of the timer routines will only work when called from C,

the sa1100 sleep routines are modified to branch to the loop-based delay

functions directly.

[링크 : https://git.kernel.org/.../linux.git/commit/?id=d0a533b18235d36206b9b422efadb7cee444dfdb] 


아무튼.. 뜬금없는 결론은...

ARMv7 부터는 bogoMIPS가 그리 신뢰할 만한(?) CPU 클럭 예측 방법이 아니게 되었다 정도이려나?

Posted by 구차니
embeded/ARM2015. 2. 28. 23:37

라즈베리의 cpuinfo에서 arm7l 이라고 나와서 검색


느낌으로는.. 걍 붙는 접두 같긴한데.. (armel armhf랑은 다르게)

h는 hard

t는 thumb

n은 neon의 스멜이... -_-a


Mer port nameOBS scheduler nameRPM architecturesOBS project name in MDSOBS repository name in MDSDescription
i486i586i486Core:i486Core_i486Generic i486+ X86 port
i586i586i586, i686Core:i586Core_i586SSSE3 enabled X86 port
x86_64x86_64x86_64Core:x86_64Core_x86_64Generic 64 bit port
armv6larmv7elarmv6lCore:armv6lCore_armv6lARMv6 + VFP port
armv7larmv7elarmv7lCore:armv7lCore_armv7lARMv7 VFPv3-D16 port, softfp ABI
armv7hlarmv8elarmv7hlCore:armv7hlCore_armv7hlARMv7 VFPv3-D16 port, hardfp ABI
armv7tnhlarmv8elarmv7hl, armv7nhl, armv7tnhl, armv7thlCore:armv7tnhlCore_armv7tnhlARMv7 VFPv3-D16 port, hardfp ABI, NEON, Thumb2
mipselmipsmipselCore:mipselCore_mipselMIPS32 O32 ABI port, hardfloat

[링크 : https://wiki.merproject.org/wiki/OBS_architecture_naming]


그리고 VFPv4 에서는 FMAC를 탑재하고

soft는 소프트웨어 부동소수점 흉내내기(에뮬레이션)

softfp는 소프트웨어적으로 흉내내는 방식을 따르나 자동으로 vfp 레지스터에 쓰도록 하고

hardfp는 vfp 하드웨어 레지스터에 바로 쓰도록 하는 차이가 있다고 한다.


Soft

  • Full software floating point - compiler should refuse to generate a real FPU instruction and -mfpu= is ignored.
  • FPU operations are emulated by the compiler
  • Function calls are generated to pass FP arguments (float, double) in integer registers (one for float, a pair of registers for double)


Softfp

  • To reiterate, function calls are generated to pass FP arguments in integer registers
  • Compiler can make smart choices about when and if it generates emulated or real FPU instructions depending on chosen FPU type (-mfpu=)
  • This means soft and softfp code can be intermixed


Hardfp

  • Full hardware floating point.
  • FP arguments are passed directly in FPU registers
  • Cannot possibly run without the FPU defined in -mfpu= (or a superset of the FPU defined, where relevant)
  • FPU instructions could be emulated by the kernel so that FPU-less systems could run with this ABI but as far as we know this does not exist
  • No function prologue or epilogue requirements for FP arguments, no pipeline stalls, maximum performance (just like in PowerPC and MIPS)

[링크 : https://wiki.debian.org/ArmHardFloatPort/VfpComparison]



FMAC는 Fused Multiply ACCumulator로

하드웨어로 구성된 다중 누산기 라고 해석하면 되려나?

[링크 : http://en.wikipedia.org/wiki/Multiply–accumulate_operation]

Posted by 구차니
embeded/ARM2015. 2. 26. 22:08

예전에 dd로 부팅디스크 만들어 보려다 실패했는데..

한번 다시 도전해 봐야겠다?


[링크 : http://www.tldp.org/HOWTO/Bootdisk-HOWTO/buildroot.html]

[링크 : https://wiki.ubuntu.com/ARM/RootfsFromScratch]

'embeded > ARM' 카테고리의 다른 글

bogoMIPS가 너무 낮게 나오네  (0) 2015.03.03
arm7l softfp hardfp fmac  (0) 2015.02.28
SD 메모리를 메인 스토리지로 쓰는 녀석...들?  (0) 2015.02.24
eMMC / UFS / PCM(PRAM)  (0) 2015.02.20
arm linux patch  (0) 2015.02.20
Posted by 구차니