20150614 收到, Raspberry Pi 台灣樹莓派 sosorry 提供
感謝
Raspberry Pi 台灣樹莓派 sosorry 的大方, 提供了一套
raspberry pi 2 Model B , 讓我有機會玩到 cortex a7, 這是一個比較新的平台 (201502 發表), 不是舊的 ARM1176JZF, 讓我比較有動力想折磨自己, 不過目前找到的開發資料似乎都是針對 rpi 1, 這是新玩具的宿命。
Hardkernel ODROID C1 和 rpi2 b 很像的一塊開發板, 小心別買錯了, 不過其實也沒差, 如果你要跑 linux 的話。
rpi2 的 soc 從 bcm2835 換成 bcm2836, 產品編號只加了一, 應該沒怎麼變化吧! 不過實際上變化並不小, 看你是開發人員還是單純的使用者, 而這些改變會影響寫 bare-metal 程式的開發人員, 然後你發現找不到 bcm2836 的 datasheet 對吧!
疑! raspberry pi 不是也號稱 opensource 嗎? 什麼線路圖也都 open 嗎? 但 soc 是 Broadcom 的, 也許有什麼困難吧! 但應該還是有辦法的, 例如公開某些和寫程式相關的部份, 這才不會造成開發人員的困擾, 我相信以 pi 的影響力, 是可以和 Broadcom 談的。
boot 的 code, 幾乎都沒有 source code, 這也讓想寫 bare-metal 程式的人遇到類似 pc biso/uefi 的黑盒子, 有點不過癮。
從以下 url 得知:
[U-Boot] [PATCH 2/3] bcm2836 SoC support (used in Raspberry Pi 2 model B)
The bcm2835 and bcm2836 are essentially identical, except:
- The CPU is an ARM1176 v.s. a quad-core Cortex-A7.
- The physical address of many IO controllers has moved.
cpu 從單核心的 arm1176 換成了 4 核心的 cortex-a7, 這改變不大嗎? 但是把 physical address 換掉了這個改變更大, 更 ..., 找不到 datasheet 更更 ...
rpi2 記憶體也來到了 1 GB, 有個大噱頭是可以安裝 windows 10, 科科。
還得從這個 u-boot patch 去找出 physical address (L59), 這些人真是厲害, 去哪裡挖到的資料。
u-boot.bcm2836.patch
1 arch/arm/cpu/armv7/Makefile | 1 +
2 arch/arm/cpu/armv7/bcm2835/Makefile | 13 +++++++++++++
3 arch/arm/include/asm/arch-bcm2835/gpio.h | 5 +++++
4 arch/arm/include/asm/arch-bcm2835/mbox.h | 6 +++++-
5 arch/arm/include/asm/arch-bcm2835/sdhci.h | 6 +++++-
6 arch/arm/include/asm/arch-bcm2835/timer.h | 6 +++++-
7 arch/arm/include/asm/arch-bcm2835/wdog.h | 6 +++++-
8 7 files changed, 39 insertions(+), 4 deletions(-)
9 create mode 100644 arch/arm/cpu/armv7/bcm2835/Makefile
10
11 diff --git a/arch/arm/cpu/armv7/Makefile b/arch/arm/cpu/armv7/Makefile
12 index 409e6f5651b6..7f77c729a191 100644
13 --- a/arch/arm/cpu/armv7/Makefile
14 +++ b/arch/arm/cpu/armv7/Makefile
15 @@ -41,6 +41,7 @@ endif
16 obj-$(if $(filter am33xx,$(SOC)),y) += am33xx/
17 obj-$(if $(filter armada-xp,$(SOC)),y) += armada-xp/
18 obj-$(CONFIG_AT91FAMILY) += at91/
19 +obj-$(CONFIG_BCM2835) += bcm2835/
20 obj-$(if $(filter bcm281xx,$(SOC)),y) += bcm281xx/
21 obj-$(if $(filter bcmcygnus,$(SOC)),y) += bcmcygnus/
22 obj-$(if $(filter bcmnsp,$(SOC)),y) += bcmnsp/
23 diff --git a/arch/arm/cpu/armv7/bcm2835/Makefile b/arch/arm/cpu/armv7/bcm2835/Makefile
24 new file mode 100644
25 index 000000000000..ed1ee4753d49
26 --- /dev/null
27 +++ b/arch/arm/cpu/armv7/bcm2835/Makefile
28 @@ -0,0 +1,13 @@
29 +#
30 +# (C) Copyright 2012 Stephen Warren
31 +#
32 +# SPDX-License-Identifier: GPL-2.0+
33 +#
34 +
35 +src_dir := ../../arm1176/bcm2835/
36 +
37 +obj-y :=
38 +obj-y += $(src_dir)/init.o
39 +obj-y += $(src_dir)/reset.o
40 +obj-y += $(src_dir)/timer.o
41 +obj-y += $(src_dir)/mbox.o
42 diff --git a/arch/arm/include/asm/arch-bcm2835/gpio.h b/arch/arm/include/asm/arch-bcm2835/gpio.h
43 index db42896201b3..c8ef8f528a21 100644
44 --- a/arch/arm/include/asm/arch-bcm2835/gpio.h
45 +++ b/arch/arm/include/asm/arch-bcm2835/gpio.h
46 @@ -1,6 +1,7 @@
47 /*
48 * Copyright (C) 2012 Vikram Narayananan
49 * <vikram186 at gmail.com>
50 + * (C) Copyright 2012,2015 Stephen Warren
51 *
52 * SPDX-License-Identifier: GPL-2.0+
53 */
54 @@ -8,7 +9,11 @@
55 #ifndef _BCM2835_GPIO_H_
56 #define _BCM2835_GPIO_H_
57
58 +#ifdef CONFIG_BCM2836
59 +#define BCM2835_GPIO_BASE 0x3f200000
60 +#else
61 #define BCM2835_GPIO_BASE 0x20200000
62 +#endif
63 #define BCM2835_GPIO_COUNT 54
64
65 #define BCM2835_GPIO_FSEL_MASK 0x7
66 diff --git a/arch/arm/include/asm/arch-bcm2835/mbox.h b/arch/arm/include/asm/arch-bcm2835/mbox.h
67 index 88d2ec11a7c2..c4bbacaf3c3f 100644
68 --- a/arch/arm/include/asm/arch-bcm2835/mbox.h
69 +++ b/arch/arm/include/asm/arch-bcm2835/mbox.h
70 @@ -1,5 +1,5 @@
71 /*
72 - * (C) Copyright 2012 Stephen Warren
73 + * (C) Copyright 2012,2015 Stephen Warren
74 *
75 * SPDX-License-Identifier: GPL-2.0+
76 */
77 @@ -38,7 +38,11 @@
78
79 /* Raw mailbox HW */
80
81 +#ifdef CONFIG_BCM2836
82 +#define BCM2835_MBOX_PHYSADDR 0x3f00b880
83 +#else
84 #define BCM2835_MBOX_PHYSADDR 0x2000b880
85 +#endif
86
87 struct bcm2835_mbox_regs {
88 u32 read;
89 diff --git a/arch/arm/include/asm/arch-bcm2835/sdhci.h b/arch/arm/include/asm/arch-bcm2835/sdhci.h
90 index da4d5cd5a88f..2a21ccbf66ba 100644
91 --- a/arch/arm/include/asm/arch-bcm2835/sdhci.h
92 +++ b/arch/arm/include/asm/arch-bcm2835/sdhci.h
93 @@ -1,5 +1,5 @@
94 /*
95 - * (C) Copyright 2012 Stephen Warren
96 + * (C) Copyright 2012,2015 Stephen Warren
97 *
98 * SPDX-License-Identifier: GPL-2.0
99 */
100 @@ -7,7 +7,11 @@
101 #ifndef _BCM2835_SDHCI_H_
102 #define _BCM2835_SDHCI_H_
103
104 +#ifdef CONFIG_BCM2836
105 +#define BCM2835_SDHCI_BASE 0x3f300000
106 +#else
107 #define BCM2835_SDHCI_BASE 0x20300000
108 +#endif
109
110 int bcm2835_sdhci_init(u32 regbase, u32 emmc_freq);
111
112 diff --git a/arch/arm/include/asm/arch-bcm2835/timer.h b/arch/arm/include/asm/arch-bcm2835/timer.h
113 index 2d7cfe5c56f8..fc7aec7b7c59 100644
114 --- a/arch/arm/include/asm/arch-bcm2835/timer.h
115 +++ b/arch/arm/include/asm/arch-bcm2835/timer.h
116 @@ -1,5 +1,5 @@
117 /*
118 - * (C) Copyright 2012 Stephen Warren
119 + * (C) Copyright 2012,2015 Stephen Warren
120 *
121 * SPDX-License-Identifier: GPL-2.0
122 */
123 @@ -7,7 +7,11 @@
124 #ifndef _BCM2835_TIMER_H
125 #define _BCM2835_TIMER_H
126
127 +#ifdef CONFIG_BCM2836
128 +#define BCM2835_TIMER_PHYSADDR 0x3f003000
129 +#else
130 #define BCM2835_TIMER_PHYSADDR 0x20003000
131 +#endif
132
133 struct bcm2835_timer_regs {
134 u32 cs;
135 diff --git a/arch/arm/include/asm/arch-bcm2835/wdog.h b/arch/arm/include/asm/arch-bcm2835/wdog.h
136 index f369ab589c9a..beb6a0820601 100644
137 --- a/arch/arm/include/asm/arch-bcm2835/wdog.h
138 +++ b/arch/arm/include/asm/arch-bcm2835/wdog.h
139 @@ -1,5 +1,5 @@
140 /*
141 - * (C) Copyright 2012 Stephen Warren
142 + * (C) Copyright 2012,2015 Stephen Warren
143 *
144 * SPDX-License-Identifier: GPL-2.0
145 */
146 @@ -7,7 +7,11 @@
147 #ifndef _BCM2835_TIMER_H
148 #define _BCM2835_TIMER_H
149
150 +#ifdef CONFIG_BCM2836
151 +#define BCM2835_WDOG_PHYSADDR 0x3f100000
152 +#else
153 #define BCM2835_WDOG_PHYSADDR 0x20100000
154 +#endif
155
156 struct bcm2835_wdog_regs {
157 u32 unknown0[7];
這是 ODROID C1 和 rpi2 的比較:
Raspberry Pi 2/ODROID C1 Development Boards Comparison
arm cortex a 系列有好幾款, 搞得我頭昏眼花:
Cortex-A72 Processor
Cortex-A57 Processor
Cortex-A53 Processor
Cortex-A17 Processor
Cortex-A15 Processor
Cortex-A9 Processor
Cortex-A8 Processor (Single core only)
Cortex-A7 Processor
Cortex-A5 Processor
你認為是數字愈大愈厲害嗎? 感覺是這樣, 不過 a7 可以看成是精簡過後的 a15, 是新架構的
便宜 精簡版本, 可以看看
Relative Performance of ARM Cortex-A 32-bit and 64-bit Cores 的比較。
講了老半天應該來談談怎麼裝個 os 來用, 本著對 linux 的愛好, 當然是裝
Raspbian , sd card 插上 pc, dd 一下後搞定。
假如 sda 是你的 sd card, sda1 是第一個 partition, 以下指令是針對 sda, 結束後會產生 sda1, sda2, 這就是為什麼是使用 sda, 而不是 sda1, mmc 也是一樣的道理, 是 /dev/mmcblk0 而不是 /dev/mmcblk0p1。
disk
1 dd bs=4M if=2015-05-05-raspbian-wheezy.img of=/dev/mmcblk0
2 root@NB-debian:/home/descent/download/rpi/2# mount /dev/mmcblk0p2 /media/2/
3 root@NB-debian:/home/descent/download/rpi/2# ls /media/1/
4 bcm2708-rpi-b.dtb COPYING.linux kernel7.img start_db.elf
5 bcm2708-rpi-b-plus.dtb fixup_cd.dat kernel.img start.elf
6 bcm2709-rpi-2-b.dtb fixup.dat LICENCE.broadcom start_x.elf
7 bootcode.bin fixup_db.dat LICENSE.oracle
8 cmdline.txt fixup_x.dat overlays
9 config.txt issue.txt start_cd.elf
10 root@NB-debian:/home/descent/download/rpi/2# ls /media/2/
11 bin dev home lost+found mnt proc run selinux sys usr
12 boot etc lib media opt root sbin srv tmp var
disk L3 ~ 9 就是第一個 partition 的內容, 可以把他想成是 pc 的 bios/uefi, 那些東西的學問可不小; disk L10 ~ 12 就是熟悉的 linux 目錄。
插上 hdmi 接到電視後就是下面的樣子, 還特地去買了 usb keyboard/mouse 要不然一直卡在這邊也不是辦法。
設定完之後, 就是一般的 linux 畫面, 我是選擇進入 X。
【
以 Serial Port 操作 Raspberry Pi A+ 】這篇提到怎麼使用 serial, 我們可是軟體開發人員耶, 當然是用 serial port, 看著大電視多不方便。
我沒有接黑色的 ground pin, 這不是好的行為。最後還是接了黑色的 ground, 要不然有時候會怪怪的。
minicom 的設定值:
A - Serial Device : /dev/ttyUSB0
B - Lockfile Location : /var/lock
C - Callin Program :
D - Callout Program :
E - Bps/Par/Bits : 115200 8N1
F - Hardware Flow Control : No
G - Software Flow Control : No
# set toolchain path
export PATH=$PATH:/home/descent/git/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
export CROSS_COMPILE=arm-linux-gnueabihf-
make rpi_2_defconfig
make
ref:
沒有留言:
張貼留言
使用 google 的 reCAPTCHA 驗證碼, 總算可以輕鬆留言了。
我實在受不了 spam 了, 又不想讓大家的眼睛花掉, 只好放棄匿名留言。這是沒辦法中的辦法了。留言的朋友需要有 google 帳號。