b***i 发帖数: 3043 | 1 目的是嵌入式系统,比如ARM 600MHz,512M内存,SD card,USB,ethernet等都是固定
的硬件,比如像苹果手机那样。
那么,能做到启动Linux使用2秒钟以内吗? |
s******u 发帖数: 501 | 2 加电到进入console 2秒钟?基本不太可能啊
上电-->flash->bootloader->load kernel->load driver/module。硬件的driver初始
化很暴力的,动不动就在那边sleep几个甚至几十上百毫秒。还有kernel和root
filesystem总要从flash或者SD读进去吧,再小的系统,起码4MB内核,十几MB文件系统
,这个的load时间就要1-2秒的量级了。总共算起来600Mhz的ARM启动完要10-20秒左右
吧 |
b***i 发帖数: 3043 | 3 为啥要sleep?
不能把启动好的做成image然后直接调入内存吗?
【在 s******u 的大作中提到】 : 加电到进入console 2秒钟?基本不太可能啊 : 上电-->flash->bootloader->load kernel->load driver/module。硬件的driver初始 : 化很暴力的,动不动就在那边sleep几个甚至几十上百毫秒。还有kernel和root : filesystem总要从flash或者SD读进去吧,再小的系统,起码4MB内核,十几MB文件系统 : ,这个的load时间就要1-2秒的量级了。总共算起来600Mhz的ARM启动完要10-20秒左右 : 吧
|
N******K 发帖数: 10202 | 4 各种硬件的寄存器得设置吧?
【在 b***i 的大作中提到】 : 为啥要sleep? : 不能把启动好的做成image然后直接调入内存吗?
|
s******u 发帖数: 501 | 5 很多硬件的初始化要执行一系列的init sequence,大多很花时间。ethernet, usb,
spi/i2c等等几大件加起来就要5秒以上了
【在 b***i 的大作中提到】 : 为啥要sleep? : 不能把启动好的做成image然后直接调入内存吗?
|
x****u 发帖数: 44466 | 6 可以是可以,但没什么意义。
【在 b***i 的大作中提到】 : 目的是嵌入式系统,比如ARM 600MHz,512M内存,SD card,USB,ethernet等都是固定 : 的硬件,比如像苹果手机那样。 : 那么,能做到启动Linux使用2秒钟以内吗?
|
S*A 发帖数: 7142 | 7 可以hibernate. 但是不可能2 秒钟。
因为读入状态文件要先初始化硬盘和驱动。
2 秒sleep 可以。有distro 这么干过。 |
x****u 发帖数: 44466 | 8 有人把自检代码统统注释掉,2s进入ramdisk没问题。
【在 S*A 的大作中提到】 : 可以hibernate. 但是不可能2 秒钟。 : 因为读入状态文件要先初始化硬盘和驱动。 : 2 秒sleep 可以。有distro 这么干过。
|
s******u 发帖数: 501 | 9 刚上电哪来的ramdisk
ramdisk的内容不还是要从外存读进来,那就是秒的量级了
加上之前还有bootloader和最基本的硬件init
【在 x****u 的大作中提到】 : 有人把自检代码统统注释掉,2s进入ramdisk没问题。
|
x****u 发帖数: 44466 | 10 从firmware里面读几MB的image展开,时间基本可以忽略。
硬件init极快,就是自检慢点,去掉即可。
【在 s******u 的大作中提到】 : 刚上电哪来的ramdisk : ramdisk的内容不还是要从外存读进来,那就是秒的量级了 : 加上之前还有bootloader和最基本的硬件init
|
|
|
s******u 发帖数: 501 | 11 firmware就是spi总线的flash,10-20Mhz的总线速度顶天了。
有效的2MB/s多点还得算overhead。
这就是“速度极快,时间基本可以忽略”?
【在 x****u 的大作中提到】 : 从firmware里面读几MB的image展开,时间基本可以忽略。 : 硬件init极快,就是自检慢点,去掉即可。
|
s******u 发帖数: 501 | 12 说回来你看过linux启动的serial console没?哪一步是在做自检?
【在 x****u 的大作中提到】 : 从firmware里面读几MB的image展开,时间基本可以忽略。 : 硬件init极快,就是自检慢点,去掉即可。
|
x****u 发帖数: 44466 | 13 总线什么的都需要自检或者探测。。。
我们有人逐条注释掉了这类代码。
【在 s******u 的大作中提到】 : 说回来你看过linux启动的serial console没?哪一步是在做自检?
|
x****u 发帖数: 44466 | 14 现在SOC要是就这点速度,看个小电影都做不到。
【在 s******u 的大作中提到】 : firmware就是spi总线的flash,10-20Mhz的总线速度顶天了。 : 有效的2MB/s多点还得算overhead。 : 这就是“速度极快,时间基本可以忽略”?
|
s******u 发帖数: 501 | 15 看小电影跟这个倒是没关系,内部存储和flash接在不同的总线上,速度差的多了
不过我承认确实是低估了,beagleboard的启动做到了630ms
• Logging starts at 70 ms from reset. Boot time from reset is 300 + 70
= 370 ms.
• Logging starts at 330 ms from power on. Cold boot time is 330 + 300
= 630 ms.
• Loading of 1.5 MiB Linux image from NAND takes 237 ms with
throughput 6 MiB/s.
• Code execution takes 60 ms or 43M CPU cycles.
• The most time consuming operation is coping firmware from NAND flash.
他把kernel压到了900k,busybox image 600k,总共只要load 1.5MB的数据
【在 x****u 的大作中提到】 : 现在SOC要是就这点速度,看个小电影都做不到。
|
x****u 发帖数: 44466 | 16 现在的芯片都是内置EEPROM的,当年在PC上人家都能改出2秒启动来。
70
300
flash.
【在 s******u 的大作中提到】 : 看小电影跟这个倒是没关系,内部存储和flash接在不同的总线上,速度差的多了 : 不过我承认确实是低估了,beagleboard的启动做到了630ms : • Logging starts at 70 ms from reset. Boot time from reset is 300 + 70 : = 370 ms. : • Logging starts at 330 ms from power on. Cold boot time is 330 + 300 : = 630 ms. : • Loading of 1.5 MiB Linux image from NAND takes 237 ms with : throughput 6 MiB/s. : • Code execution takes 60 ms or 43M CPU cycles. : • The most time consuming operation is coping firmware from NAND flash.
|
s******u 发帖数: 501 | 17 感叹一下,900K的kernel不知道还剩下些什么东西
busybox把所有的命令都删光估计可以到600k了
另外50MHz的spi也很变态
70
300
flash.
【在 s******u 的大作中提到】 : 看小电影跟这个倒是没关系,内部存储和flash接在不同的总线上,速度差的多了 : 不过我承认确实是低估了,beagleboard的启动做到了630ms : • Logging starts at 70 ms from reset. Boot time from reset is 300 + 70 : = 370 ms. : • Logging starts at 330 ms from power on. Cold boot time is 330 + 300 : = 630 ms. : • Loading of 1.5 MiB Linux image from NAND takes 237 ms with : throughput 6 MiB/s. : • Code execution takes 60 ms or 43M CPU cycles. : • The most time consuming operation is coping firmware from NAND flash.
|
s******u 发帖数: 501 | 18 得了,soc内置flash的也许有那么几个,什么时候成了标配内置的了,你倒是找个带
flash的soc出来看看
【在 x****u 的大作中提到】 : 现在的芯片都是内置EEPROM的,当年在PC上人家都能改出2秒启动来。 : : 70 : 300 : flash.
|
x****u 发帖数: 44466 | 19 为什么要在32位机上用这么慢的总线操作io?又不是arduino放mp3,再说人家arduino
也有内置EEPROM。
【在 s******u 的大作中提到】 : 感叹一下,900K的kernel不知道还剩下些什么东西 : busybox把所有的命令都删光估计可以到600k了 : 另外50MHz的spi也很变态 : : 70 : 300 : flash.
|
x****u 发帖数: 44466 | 20 这年头SOC带个引导ROM是什么高大上么?
【在 s******u 的大作中提到】 : 得了,soc内置flash的也许有那么几个,什么时候成了标配内置的了,你倒是找个带 : flash的soc出来看看
|
|
|
s******u 发帖数: 501 | 21 说实话确实不是高大上,但事实是现在常见的的soc和fpga基本都是外置的flash芯片
至于为什么,我也不知道。。。
【在 x****u 的大作中提到】 : 这年头SOC带个引导ROM是什么高大上么?
|
s******u 发帖数: 501 | 22 你不可能在bootloader里面写一个完整的pcie或者sata或者其他lvds的协议stack,也
没必要,
因为firmware只是在boot时候用一下,用的都是最简单的总线,一对速度没要求,二是
load的程序可以很小
arduino
【在 x****u 的大作中提到】 : 为什么要在32位机上用这么慢的总线操作io?又不是arduino放mp3,再说人家arduino : 也有内置EEPROM。
|
x****u 发帖数: 44466 | 23 你想想,SPI接flash还要在上面跑linux,这不是行为艺术么?怎么支持擦除?难道对
面再放一个8位MCU,内置EEPROM烧上逻辑和这边通信?
【在 s******u 的大作中提到】 : 说实话确实不是高大上,但事实是现在常见的的soc和fpga基本都是外置的flash芯片 : 至于为什么,我也不知道。。。
|
x****u 发帖数: 44466 | 24 你计算机体系结构是改行学的吧。
与其操心bootloader有没有空间支持pcie驱动,先想想总线控制器放哪里吧。
计算机RST时必须跳转到ROM固定地址,不管多简单的总线也没用。如果ROM外置,和CPU
之间的硬件连接可比SPI复杂多了。
【在 s******u 的大作中提到】 : 你不可能在bootloader里面写一个完整的pcie或者sata或者其他lvds的协议stack,也 : 没必要, : 因为firmware只是在boot时候用一下,用的都是最简单的总线,一对速度没要求,二是 : load的程序可以很小 : : arduino
|
s******u 发帖数: 501 | 25 flash只是放boot image的,文件系统当然是在内存里面,你自己想的吧,拿flash当文
件系统了
还有,flash的擦除还需要mcu?你这才是搞行为艺术。。。
【在 x****u 的大作中提到】 : 你想想,SPI接flash还要在上面跑linux,这不是行为艺术么?怎么支持擦除?难道对 : 面再放一个8位MCU,内置EEPROM烧上逻辑和这边通信?
|
x****u 发帖数: 44466 | 26 文件系统当然在内存里。。。我靠你们老师没说过RAM掉电后就什么都没有了?
通过SPI连接flash,想过那边走线么?
【在 s******u 的大作中提到】 : flash只是放boot image的,文件系统当然是在内存里面,你自己想的吧,拿flash当文 : 件系统了 : 还有,flash的擦除还需要mcu?你这才是搞行为艺术。。。
|
s******u 发帖数: 501 | 27 呵呵,跟你争论这些东西是浪费时间了,你的知识似乎都是似是而非,像是是来自30年
前的课本,而且没有更新过
CPU
【在 x****u 的大作中提到】 : 你计算机体系结构是改行学的吧。 : 与其操心bootloader有没有空间支持pcie驱动,先想想总线控制器放哪里吧。 : 计算机RST时必须跳转到ROM固定地址,不管多简单的总线也没用。如果ROM外置,和CPU : 之间的硬件连接可比SPI复杂多了。
|
s******u 发帖数: 501 | 28 。。。我居然跟一个完全没有embedded system知识的人浪费了这么多口舌,真是服了
自己了
【在 x****u 的大作中提到】 : 文件系统当然在内存里。。。我靠你们老师没说过RAM掉电后就什么都没有了? : 通过SPI连接flash,想过那边走线么?
|
x****u 发帖数: 44466 | 29 尼玛现在文科都这么嘴硬。
随便找个SOC的框图看看会死么?SOC这种冯诺依曼架构是70年前的设计了,到现在也没
办法替代,就靠你了。
【在 s******u 的大作中提到】 : 呵呵,跟你争论这些东西是浪费时间了,你的知识似乎都是似是而非,像是是来自30年 : 前的课本,而且没有更新过 : : CPU
|
x****u 发帖数: 44466 | 30 你嵌入式系统是在手机维修班学的么?
【在 s******u 的大作中提到】 : 。。。我居然跟一个完全没有embedded system知识的人浪费了这么多口舌,真是服了 : 自己了
|
|
|
n*****t 发帖数: 22014 | 31 不见得,可以 ramdisk,只编译确定有的 driver,全部 modprobe。
其实 2 秒没意义,确定要用的应该全放在 zimage 里,这样才最快最省
【在 S*A 的大作中提到】 : 可以hibernate. 但是不可能2 秒钟。 : 因为读入状态文件要先初始化硬盘和驱动。 : 2 秒sleep 可以。有distro 这么干过。
|
n*****t 发帖数: 22014 | 32 绝对可以更小
【在 s******u 的大作中提到】 : 感叹一下,900K的kernel不知道还剩下些什么东西 : busybox把所有的命令都删光估计可以到600k了 : 另外50MHz的spi也很变态 : : 70 : 300 : flash.
|
n**********2 发帖数: 648 | 33 flash芯片的面积非常大, 如果做进SOC的话, 每片晶圆的芯片数量会大幅下降, 利润会
低很多.
【在 s******u 的大作中提到】 : 说实话确实不是高大上,但事实是现在常见的的soc和fpga基本都是外置的flash芯片 : 至于为什么,我也不知道。。。
|
b***i 发帖数: 3043 | 34 don't like spi. Isn't there another technology?
【在 s******u 的大作中提到】 : firmware就是spi总线的flash,10-20Mhz的总线速度顶天了。 : 有效的2MB/s多点还得算overhead。 : 这就是“速度极快,时间基本可以忽略”?
|
s******u 发帖数: 501 | 35 也有i2c接口的flash,但是那个的速度更慢。而且用在bootrom上似乎也没多大选择,
支持的就那么几个简单的协议。进到bootloader之后就可以选择下一步到哪里去load更
进一步的image了,比方说tftp
【在 b***i 的大作中提到】 : don't like spi. Isn't there another technology?
|
W*****x 发帖数: 684 | 36 你说的这个是Linux移植, 主要是修改硬件BSP, RAM时钟, 外围driver...
一般ARM嵌入式系统, 多用NAND FLASH + UBIFS,不要用SD卡, 慢且有寿命限制.
【在 b***i 的大作中提到】 : 目的是嵌入式系统,比如ARM 600MHz,512M内存,SD card,USB,ethernet等都是固定 : 的硬件,比如像苹果手机那样。 : 那么,能做到启动Linux使用2秒钟以内吗?
|
W*****x 发帖数: 684 | 37 这个用来给SOC建立初始时钟, 激活默认的存储外设访问接口, 加载二级bootloader.
【在 x****u 的大作中提到】 : 这年头SOC带个引导ROM是什么高大上么?
|
S*A 发帖数: 7142 | 38 sherrylu 说的对,我一开始没有注意你们讨论的是 ARM。
能够跑 Linux 的 ARM SOC 基本上都不自己带 flash。
反而是那些 8 位 MCU 带 flash。 Atmega328p 就是 32k
flash。
Linux 嵌入接 flash 和 SPI 和 I2C 非常常见,你自己少见
多怪了。基本上所有可以 flash firmware 的 linux router,
openwrt/DDWRT 之类,flash 都是在 SOC 外部的。
你要需要我可以找两个版子来拍个照片给你。
原因很简单,能够跑 Linux 的 flash 空间比较大,把那么
大的 flash 写在 SOC 里面很贵。Atmemga328p 就比
Atmega88p 贵一些。到了 256K 的8位单片机又贵一些。
这些是没有外部 flash 的。
能跑 Linux 的flash 要求比较大,如果有外部 flash 的话,
内部有个小 flash 意义就不大了。直接用外部引导好了。
ARM 这些写 SPI/I2C flash 不需要经过 8 位单片机。
【在 x****u 的大作中提到】 : 你想想,SPI接flash还要在上面跑linux,这不是行为艺术么?怎么支持擦除?难道对 : 面再放一个8位MCU,内置EEPROM烧上逻辑和这边通信?
|
S*A 发帖数: 7142 | 39 我当时理解错了,说的是 PC, 是 ARM 当然外设就简单很多。
其实 dmesg 里面有是时钟显示,你可以看出时间在什么地方花
调的。ramdisk 不一定快,因为读 zimage/initram 是用 BIOS
int 13 完成的,每次一两个扇区。
我的 PC, 看 dmsg,我之看大头时间:
ACPI 和 PCI 扫描需要一定时间。
引导其他 CPU 需要一定时间。(IPI call smap)
初始化 SATA port reset 需要时间,然后进入 SATA 3G mode
需要再次 port reset, 这些都有固定的 reset 时间的。
USB 同样, port reset 所有设备需要时间。
然后进入 init ram disk 就已经 2 秒钟了。
找 USB 设备需要 从新 port reset。
mount 文件系统等等。
[ 0.156718] ACPI: All ACPI Tables successfully acquired
[ 0.183241] smpboot: CPU0: Intel(R) Xeon(R) CPU W3680 @ 3.
33GHz (f
am: 06, model: 2c, stepping: 02)
[ 0.284772] Performance Events: PEBS fmt1+, 16-deep LBR, Westmere events,
Int[ 0.299501] #2 #3 #4 #5 #6 #7 #8 #9 #10 #11
[ 0.432083] x86: Booted up 1 node, 12 CPUs
[ 0.704795] PCI: CLS 64 bytes, default 64
[ 0.704836] Unpacking initramfs...
[ 0.915132] Freeing initrd memory: 1
[ 0.963134] ata_piix 0000:00:1f.5: MAP [ P0 -- P1 -- ]
[ 1.114167] scsi2 : ata_piix
[ 1.114351] ehci-pci: EHCI PCI platform driver
[ 1.138083] usbserial: USB Serial support registered for generic
[ 1.144629] PM: Hibernation image not present or could not be loaded.
[ 1.418907] ata4: SATA link down (SStatus 4 SControl 300)
[ 1.722727] ata1.00: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[ 1.806177] ata1.01: configured for UDMA/133
[ 1.806452] scsi 0:0:0:0: Direct-Access ATA WDC
[ 1.880049] Freeing unused kernel memory: 1440K
[ 1.888155] systemd[1]: Running in initial RAM disk.
[ 1.986634] systemd-udevd[289]: starting version 208
[ 2.003826] pps_core: LinuxPPS API ver. 1 registered
【在 n*****t 的大作中提到】 : 不见得,可以 ramdisk,只编译确定有的 driver,全部 modprobe。 : 其实 2 秒没意义,确定要用的应该全放在 zimage 里,这样才最快最省
|
n******t 发帖数: 4406 | 40 这有什么奇怪的。我当年用linux 2.2kernel,一般在100K左右,
基本上web服务器,ftp,bbs,防火墙,都搞定了。
【在 s******u 的大作中提到】 : 感叹一下,900K的kernel不知道还剩下些什么东西 : busybox把所有的命令都删光估计可以到600k了 : 另外50MHz的spi也很变态 : : 70 : 300 : flash.
|
|
|
s******u 发帖数: 501 | 41 scheduler, memory management, process management, file system这些的代码都不
小啊,我随便写个简单地device module就有几十k了,总之能压倒几百K的都是牛逼
【在 n******t 的大作中提到】 : 这有什么奇怪的。我当年用linux 2.2kernel,一般在100K左右, : 基本上web服务器,ftp,bbs,防火墙,都搞定了。
|
s******u 发帖数: 501 | 42 扯了一大圈好像没人在回答楼主最早的问题了,呵呵
你的是基于什么开发板的么?如果是的话找个对应的device tree,还有那些device对
应的module什么的,编译一个kernel出来应该还不太麻烦。如果是完全自己设计的板子
那相对麻烦多了,不过要能自己设计开发板,搞定个kernel build应该不是问题吧
可以去看看yocto
https://www.yoctoproject.org/
【在 b***i 的大作中提到】 : 目的是嵌入式系统,比如ARM 600MHz,512M内存,SD card,USB,ethernet等都是固定 : 的硬件,比如像苹果手机那样。 : 那么,能做到启动Linux使用2秒钟以内吗?
|
S*A 发帖数: 7142 | 43 我说那个看 dmesg 的应该是相关的吧。把 time stamp 打开。
看看启动引导的时候时间都花在什么模块上了。
基本上, CPU 是很快的。慢的是外设。你要用的外设越多,
越容易慢。找到最慢的部分看看如何能简化。
【在 s******u 的大作中提到】 : 扯了一大圈好像没人在回答楼主最早的问题了,呵呵 : 你的是基于什么开发板的么?如果是的话找个对应的device tree,还有那些device对 : 应的module什么的,编译一个kernel出来应该还不太麻烦。如果是完全自己设计的板子 : 那相对麻烦多了,不过要能自己设计开发板,搞定个kernel build应该不是问题吧 : 可以去看看yocto : https://www.yoctoproject.org/
|
b***i 发帖数: 3043 | 44 一个方案是Zync 7000 双ARM的FPGA,自带所有需要的设备,包括SD controller。
另一个是Freescale的coldfire系列。
最近,pico 发布了只要300块(促销价)的开发版,八月31前,考虑需不需要买一个。
如果只给这个开发版开发Linux,是否可以把不需要的代码全部删掉?另外,SD
controller是不是比spi快?
【在 s******u 的大作中提到】 : 扯了一大圈好像没人在回答楼主最早的问题了,呵呵 : 你的是基于什么开发板的么?如果是的话找个对应的device tree,还有那些device对 : 应的module什么的,编译一个kernel出来应该还不太麻烦。如果是完全自己设计的板子 : 那相对麻烦多了,不过要能自己设计开发板,搞定个kernel build应该不是问题吧 : 可以去看看yocto : https://www.yoctoproject.org/
|
b*****e 发帖数: 1193 | 45 人楼主问的就是embedded linux , 剪裁以后能否2s启动,这当然是可以了。
有啥好争的?
zynq这个肯定没问题。
不过,我做的没有用linux,自己port的OS和driver,启动更快
另外可以考虑imx 6Q,我买了个板子$130,这个也没问题。而且freescale的支持和网上
社区的支持比较多
公司用jacinto 6的也不少,双核。Ti的社区也很完善。
coldfire,目前冷一些。
看你啥应用了。
用SD还是spi flash,看你什么应用了。速度上,都不是快速设备。SPIFI可以到50MB/s
, SD大概是50-200MHz,
一般是用zip image 放flash/SD,load到ram,展开。SD就做个外部硬盘用。
另外,SD升级firmware方便些。 |
x****u 发帖数: 44466 | 46 i2c的flash用在bootrom上,大师你在说什么啊。。。
【在 s******u 的大作中提到】 : 也有i2c接口的flash,但是那个的速度更慢。而且用在bootrom上似乎也没多大选择, : 支持的就那么几个简单的协议。进到bootloader之后就可以选择下一步到哪里去load更 : 进一步的image了,比方说tftp
|
S*A 发帖数: 7142 | 47
你可以先把不需要的模块 disable。 改 config。
还有就是好好理解确定你目前慢的时间是在什么模块上,
在干什么事。
SD controller 如果事 SOC 自己带的,用 SDIO 模式一般会比 SPI
快。这个要看 controller 提供什么样的外设借口。一般来说,你
不需要用 GPIO 来做 SPI 就会快很多。
【在 b***i 的大作中提到】 : 一个方案是Zync 7000 双ARM的FPGA,自带所有需要的设备,包括SD controller。 : 另一个是Freescale的coldfire系列。 : 最近,pico 发布了只要300块(促销价)的开发版,八月31前,考虑需不需要买一个。 : 如果只给这个开发版开发Linux,是否可以把不需要的代码全部删掉?另外,SD : controller是不是比spi快?
|
x****u 发帖数: 44466 | 48 我就知道这帖子能把民科都引过来。
外置EEPROM不管有多便宜,atmega328p也离不开内置bootrom,不然你boot不了连总线
都不支持。
【在 S*A 的大作中提到】 : sherrylu 说的对,我一开始没有注意你们讨论的是 ARM。 : 能够跑 Linux 的 ARM SOC 基本上都不自己带 flash。 : 反而是那些 8 位 MCU 带 flash。 Atmega328p 就是 32k : flash。 : Linux 嵌入接 flash 和 SPI 和 I2C 非常常见,你自己少见 : 多怪了。基本上所有可以 flash firmware 的 linux router, : openwrt/DDWRT 之类,flash 都是在 SOC 外部的。 : 你要需要我可以找两个版子来拍个照片给你。 : 原因很简单,能够跑 Linux 的 flash 空间比较大,把那么 : 大的 flash 写在 SOC 里面很贵。Atmemga328p 就比
|
x****u 发帖数: 44466 | 49 就说ARM吧,比如iPhone,也不是用什么串行设备连接的内存。
一般说bootrom时,指的是只读内存,而说flash时指的是外存,冯诺依曼架构对这两个
设备的要求截然不同。
【在 S*A 的大作中提到】 : sherrylu 说的对,我一开始没有注意你们讨论的是 ARM。 : 能够跑 Linux 的 ARM SOC 基本上都不自己带 flash。 : 反而是那些 8 位 MCU 带 flash。 Atmega328p 就是 32k : flash。 : Linux 嵌入接 flash 和 SPI 和 I2C 非常常见,你自己少见 : 多怪了。基本上所有可以 flash firmware 的 linux router, : openwrt/DDWRT 之类,flash 都是在 SOC 外部的。 : 你要需要我可以找两个版子来拍个照片给你。 : 原因很简单,能够跑 Linux 的 flash 空间比较大,把那么 : 大的 flash 写在 SOC 里面很贵。Atmemga328p 就比
|
S*A 发帖数: 7142 | 50 嵌入 Linux 用除了用 SPI, I2C rom 也是很常见的。
你没有概念就不要出来显了。
给个常见的 beagle board 你看看,EEPOM 那一段:
http://elinux.org/BeagleBoardPinMux
EEPROM used for this is AT24 EEPROM (AT24C01B). By three pins (A0 to A2) the
I2C address can be configured to I2C address 0x50. Via Beagle's expansion
header it is connected to OMAP3 I2C bus #2.
还有以前最常用的 WRT54 这一类路由器也是用 I2C 的 boot rom。
DDWRT 西红柿都是刷在 I2C boot rom 上的。
【在 x****u 的大作中提到】 : i2c的flash用在bootrom上,大师你在说什么啊。。。
|
|
|
x****u 发帖数: 44466 | 51 所以说你缺乏根本概念。
虽然存储设备差不多,但对于SOC来说内外存是不一样的。你现在说的话20多年前也有
人问过:内存坏了,可不可以直接用硬盘跑basic,不就是速度慢点么?
the
【在 S*A 的大作中提到】 : 嵌入 Linux 用除了用 SPI, I2C rom 也是很常见的。 : 你没有概念就不要出来显了。 : 给个常见的 beagle board 你看看,EEPOM 那一段: : http://elinux.org/BeagleBoardPinMux : EEPROM used for this is AT24 EEPROM (AT24C01B). By three pins (A0 to A2) the : I2C address can be configured to I2C address 0x50. Via Beagle's expansion : header it is connected to OMAP3 I2C bus #2. : 还有以前最常用的 WRT54 这一类路由器也是用 I2C 的 boot rom。 : DDWRT 西红柿都是刷在 I2C boot rom 上的。
|
S*A 发帖数: 7142 | 52 你是不知道现在很多嵌入 MCU 可以把 flash 影射到内存地址上面的吗?
BeagleBoard 就是 ARM Linux 啊。非常常见的了。
【在 x****u 的大作中提到】 : 就说ARM吧,比如iPhone,也不是用什么串行设备连接的内存。 : 一般说bootrom时,指的是只读内存,而说flash时指的是外存,冯诺依曼架构对这两个 : 设备的要求截然不同。
|
S*A 发帖数: 7142 | 53 你个流氓辩论法,高。
你看看 beagleBoard 这个 bootrom 是放在什么地方?
是通过什么总线来访问?是不是 I2c?
我就是举个你说的例子。
【在 x****u 的大作中提到】 : 所以说你缺乏根本概念。 : 虽然存储设备差不多,但对于SOC来说内外存是不一样的。你现在说的话20多年前也有 : 人问过:内存坏了,可不可以直接用硬盘跑basic,不就是速度慢点么? : : the
|
x****u 发帖数: 44466 | 54 你要是玩过老的bios,就知道ShadowROM其实是一个CMOS选项,是启动后软件实现的。
【在 S*A 的大作中提到】 : 你是不知道现在很多嵌入 MCU 可以把 flash 影射到内存地址上面的吗? : BeagleBoard 就是 ARM Linux 啊。非常常见的了。
|
S*A 发帖数: 7142 | 55 你就不要丢人啦,
启动部分的 ROM 不能靠纯软件实现的。你要说 PC,ROM 是软件
实现的,RESET 以后启动的地址内容是谁加载进来的?
有个 bootrom 的 bootrom?
一定要有硬件支持的。
你不是说 Linux 没有人用 I2C bootrom 吗,实例都给你了。
【在 x****u 的大作中提到】 : 你要是玩过老的bios,就知道ShadowROM其实是一个CMOS选项,是启动后软件实现的。
|
x****u 发帖数: 44466 | 56 现在小孩不上课还理直气壮了。。。
把bootrom放SD卡里和这个有区别么?你有没有想想从加电到启动这段时间发生了什么
?CPU复位必须跳转特定rom地址,这才是真正意义上的boot rom,你说的这个只是外存
而已。
【在 S*A 的大作中提到】 : 你个流氓辩论法,高。 : 你看看 beagleBoard 这个 bootrom 是放在什么地方? : 是通过什么总线来访问?是不是 I2c? : 我就是举个你说的例子。
|
x****u 发帖数: 44466 | 57 尼玛现在都流行在手机维修部学计算机么?
复位时把寄存器状态清零,其中指令寄存器会被赋予一个特定高端地址,然后引发CPU
对地址线的操作。
你能分清地址线和I2C么?20年前要用硬盘模拟内存的也是你吧。
【在 S*A 的大作中提到】 : 你就不要丢人啦, : 启动部分的 ROM 不能靠纯软件实现的。你要说 PC,ROM 是软件 : 实现的,RESET 以后启动的地址内容是谁加载进来的? : 有个 bootrom 的 bootrom? : 一定要有硬件支持的。 : 你不是说 Linux 没有人用 I2C bootrom 吗,实例都给你了。
|
S*A 发帖数: 7142 | 58 傻冒了吧, 这个特定地址,在 beagle board 就是 I2C rom。
CPU 直接吧这个特定地址的访问翻译成 I2C rom access。
PC 这个 rom 也有自己的地址和加载方式。
beagle board 没有 SD card 也可以boot。 但是没有
I2C bootrom 就不可能 boot 其他的东西,包括 SD card。
区别就是,这个 CPU 的 Boot sequence 是手册上写好
Reset 去如何访问 I2C rom 的。
你如何绕也是绕不过的。
【在 x****u 的大作中提到】 : 现在小孩不上课还理直气壮了。。。 : 把bootrom放SD卡里和这个有区别么?你有没有想想从加电到启动这段时间发生了什么 : ?CPU复位必须跳转特定rom地址,这才是真正意义上的boot rom,你说的这个只是外存 : 而已。
|
x****u 发帖数: 44466 | 59 这就是对体系结构无知才有的想法。
"CPU翻译地址访问"...你知不知道CPU是高速设备,不考虑cache只能访问地址总线,这
尼玛里面的设备和步骤多了去了,一个I2C是转了N层才挂上的。
直接接不是行为艺术是什么。
【在 S*A 的大作中提到】 : 傻冒了吧, 这个特定地址,在 beagle board 就是 I2C rom。 : CPU 直接吧这个特定地址的访问翻译成 I2C rom access。 : PC 这个 rom 也有自己的地址和加载方式。 : beagle board 没有 SD card 也可以boot。 但是没有 : I2C bootrom 就不可能 boot 其他的东西,包括 SD card。 : 区别就是,这个 CPU 的 Boot sequence 是手册上写好 : Reset 去如何访问 I2C rom 的。 : 你如何绕也是绕不过的。
|
S*A 发帖数: 7142 | 60 是你自己不能区分 CPU 内部地址和外部地址。
你说的 CPU 对地址线的操作,就是内部地址,
经过 paging 以后翻译到物理地址。
物理地址最后在芯片外部是要访问外部地址。
外部地址就是芯片借口,包括 EEPROM 和 RAM
这些。这个外部地址可以是 I2C, 也可以是ram bus。
也可以是 SPI。要看这个 CPU 外设支持什么。
你不如就 beagleboard 这个例子展开说一下
这个启动过程是如何用软件加载 I2C loading
code 的吧,如果 I2C 仅仅是硬盘外设备。
我们知道,这个 beagleboard rom 就是在 I2C
里面。ARM 里面就没有 EEPROM.
CPU
【在 x****u 的大作中提到】 : 尼玛现在都流行在手机维修部学计算机么? : 复位时把寄存器状态清零,其中指令寄存器会被赋予一个特定高端地址,然后引发CPU : 对地址线的操作。 : 你能分清地址线和I2C么?20年前要用硬盘模拟内存的也是你吧。
|
|
|
S*A 发帖数: 7142 | 61 你无论如何绕,绕不过去 beagleboard 的 bootrom 就是 I2C 里。
http://elinux.org/BeagleBoardPinMux
没有其他 ARM 上的 flash。
【在 x****u 的大作中提到】 : 这就是对体系结构无知才有的想法。 : "CPU翻译地址访问"...你知不知道CPU是高速设备,不考虑cache只能访问地址总线,这 : 尼玛里面的设备和步骤多了去了,一个I2C是转了N层才挂上的。 : 直接接不是行为艺术是什么。
|
x****u 发帖数: 44466 | 62 我倒,你藏拙吧。
这点事情和MMU以及paging毛关系也没有,这两个是纯软件层概念,x86都是启动后软件
开关。
【在 S*A 的大作中提到】 : 是你自己不能区分 CPU 内部地址和外部地址。 : 你说的 CPU 对地址线的操作,就是内部地址, : 经过 paging 以后翻译到物理地址。 : 物理地址最后在芯片外部是要访问外部地址。 : 外部地址就是芯片借口,包括 EEPROM 和 RAM : 这些。这个外部地址可以是 I2C, 也可以是ram bus。 : 也可以是 SPI。要看这个 CPU 外设支持什么。 : 你不如就 beagleboard 这个例子展开说一下 : 这个启动过程是如何用软件加载 I2C loading : code 的吧,如果 I2C 仅仅是硬盘外设备。
|
x****u 发帖数: 44466 | 63 你们手机班分不清bootrom和bootimage。。。
【在 S*A 的大作中提到】 : 你无论如何绕,绕不过去 beagleboard 的 bootrom 就是 I2C 里。 : http://elinux.org/BeagleBoardPinMux : 没有其他 ARM 上的 flash。
|
S*A 发帖数: 7142 | 64 我觉得龙猫最大的本事就是可以指着一头鹿,
然后和大家辩论这是一只马。最无耻也是
这样的辩论。
beagleboard 的 bootrom 就是放 I2C 里面。
你扯上 手机班, bootimage 又如何呢?
改变不了这个 ARM 就是从 I2C EEPROM 里面
boot 起来的。这个是事实。你说的那些没有
可以自圆其说的。 |
x****u 发帖数: 44466 | 65 ARM真不是从I2C总线启动起来的,处理器手册都在网上放着。。。您老最大问题是只上
过速成班,而计算机界名词又非常混乱,所以就错乱了。
打个比方,你把linux装在U盘里启动,然后就说奔腾CPU是直接从USB Flash memory启
动的,所以体系结构教材都胡扯。
【在 S*A 的大作中提到】 : 我觉得龙猫最大的本事就是可以指着一头鹿, : 然后和大家辩论这是一只马。最无耻也是 : 这样的辩论。 : beagleboard 的 bootrom 就是放 I2C 里面。 : 你扯上 手机班, bootimage 又如何呢? : 改变不了这个 ARM 就是从 I2C EEPROM 里面 : boot 起来的。这个是事实。你说的那些没有 : 可以自圆其说的。
|
S*A 发帖数: 7142 | 66 那你来展开说说,这个 beagleboard 的启动过程是如何的。
我们先不扯 PC, 你就说这个 beagleboard 的 ARM CPU 是如何
启动,第一个地址访问的内容是谁提供的,怎么来的。最后谁
来加载 I2C rom?
【在 x****u 的大作中提到】 : ARM真不是从I2C总线启动起来的,处理器手册都在网上放着。。。您老最大问题是只上 : 过速成班,而计算机界名词又非常混乱,所以就错乱了。 : 打个比方,你把linux装在U盘里启动,然后就说奔腾CPU是直接从USB Flash memory启 : 动的,所以体系结构教材都胡扯。
|
x****u 发帖数: 44466 | 67 第一个地址访问的是ROM,然后ROM引导程序从外存下载更多数据到内存,可以是网络或
者总线设备。
ROM不见得是内置,但SOC基本都有内置ROM,一个重要原因是加密。比方说你玩ddwrt吧
,为什么很多原厂的router的ROM解不开包,就是因为密钥放在芯片内部,然后几个熔
丝位烧死,家庭作坊是dump不出来的。
【在 S*A 的大作中提到】 : 那你来展开说说,这个 beagleboard 的启动过程是如何的。 : 我们先不扯 PC, 你就说这个 beagleboard 的 ARM CPU 是如何 : 启动,第一个地址访问的内容是谁提供的,怎么来的。最后谁 : 来加载 I2C rom?
|
S*A 发帖数: 7142 | 68 所以说你指鹿为马能力真不是盖的。
CPU 手册在这里,我们一步一步来看。
http://www.ti.com/lit/ds/symlink/am3715.pdf
这个 CPU 是不是没有 SOC 内置 EEPROM?如果有请指出来
手册哪一章,哪一页。
然后 bare 的 bagle board 是不是没有除了 I2C EEPROM 以外的
形式的 ROM?
这些基本 fact 可不可以确定?还是要再辩论一番?
【在 x****u 的大作中提到】 : ARM真不是从I2C总线启动起来的,处理器手册都在网上放着。。。您老最大问题是只上 : 过速成班,而计算机界名词又非常混乱,所以就错乱了。 : 打个比方,你把linux装在U盘里启动,然后就说奔腾CPU是直接从USB Flash memory启 : 动的,所以体系结构教材都胡扯。
|
x****u 发帖数: 44466 | 69 Ctrl-F,"ROM",第一个出来的是什么东西?
【在 S*A 的大作中提到】 : 所以说你指鹿为马能力真不是盖的。 : CPU 手册在这里,我们一步一步来看。 : http://www.ti.com/lit/ds/symlink/am3715.pdf : 这个 CPU 是不是没有 SOC 内置 EEPROM?如果有请指出来 : 手册哪一章,哪一页。 : 然后 bare 的 bagle board 是不是没有除了 I2C EEPROM 以外的 : 形式的 ROM? : 这些基本 fact 可不可以确定?还是要再辩论一番?
|
S*A 发帖数: 7142 | 70
http://www.ti.com/lit/ds/symlink/am3715.pdf
手册再这里。且慢,你说的 ROM 是 SOC 内部还是外部。
如果是内部在手册什么地方提到?
你说的是 ATMega 这种 8 位单片机。比较弱的 CPU。
这个 ARM 芯片没有。
【在 x****u 的大作中提到】 : 第一个地址访问的是ROM,然后ROM引导程序从外存下载更多数据到内存,可以是网络或 : 者总线设备。 : ROM不见得是内置,但SOC基本都有内置ROM,一个重要原因是加密。比方说你玩ddwrt吧 : ,为什么很多原厂的router的ROM解不开包,就是因为密钥放在芯片内部,然后几个熔 : 丝位烧死,家庭作坊是dump不出来的。
|
|
|
x****u 发帖数: 44466 | 71 第一个rom关键字啊亲。。。
【在 S*A 的大作中提到】 : : http://www.ti.com/lit/ds/symlink/am3715.pdf : 手册再这里。且慢,你说的 ROM 是 SOC 内部还是外部。 : 如果是内部在手册什么地方提到? : 你说的是 ATMega 这种 8 位单片机。比较弱的 CPU。 : 这个 ARM 芯片没有。
|
s******u 发帖数: 501 | 72 没错,arm芯片是有内置的rom,这个rom叫bootrom,大小一般在32k左右,内容大多是
固化的。cpu加电之后第一个读的地址确实就是这里。bootrom完成最基本的硬件初始化
,包括cpu,clock,interrupt和简单的总线比方说uart,spi,i2c。根据硬件跳线的
设置bootrom接下来会去外部的flash找bootloader并加载到内存,这是系统的第一步
boot
首先,虽然并不严格,但是bootrom是算在硬件的部分的,因为对大部分soc来说
bootrom是固化的,开发者在这一步几乎做不了任何事情。对于开发者来说,真正的
boot,也就是系统的软件部分,是从bootloader开始的。而上面很多人都说了,arm的
soc几乎是没有内置可以用来放bootloader的flash的。其次,你看我之前的帖子,跟你
说过bootrom就只有这么大,能做的就是初始化最基本的能与外设通讯的手段,常用的
就是几个串行的协议。
bootloader可以初始化更多的硬件设备,并且进一步加载os的image,比方说linux的
kernel和fs image。os最后是由bootloader加载的,不是bootrom加载的
这么说你理解了?
【在 x****u 的大作中提到】 : 第一个rom关键字啊亲。。。
|
S*A 发帖数: 7142 | 73 http://e2e.ti.com/support/omap/f/849/t/108130.aspx
那个是系统的 ROM, 不可以被用户 program 的。
所以我说 ARM 上面没有其他的 EEPROM 也是成立的。
但是我承认这个举这个例子比较不贴切,我看看能不
能给你找个好点的例子。
【在 x****u 的大作中提到】 : 第一个rom关键字啊亲。。。
|
b*****e 发帖数: 1193 | 74 这个估计你搞错了。
beagleboard的i2c eeprom AT24C01是用来存Sw/HW id,ver, 一共才128 bytes,太小
了。这个板子用am335x,肯定不是用i2c rom boot。
我正好在用AM335x这个片子开发,boot要么从data bus的Nor/Nand,要么SPI flash,
要么emmc/SD,beagleboard用SD boot的可能更大些,我自己的产品就用SD boot。
the
【在 S*A 的大作中提到】 : 嵌入 Linux 用除了用 SPI, I2C rom 也是很常见的。 : 你没有概念就不要出来显了。 : 给个常见的 beagle board 你看看,EEPOM 那一段: : http://elinux.org/BeagleBoardPinMux : EEPROM used for this is AT24 EEPROM (AT24C01B). By three pins (A0 to A2) the : I2C address can be configured to I2C address 0x50. Via Beagle's expansion : header it is connected to OMAP3 I2C bus #2. : 还有以前最常用的 WRT54 这一类路由器也是用 I2C 的 boot rom。 : DDWRT 西红柿都是刷在 I2C boot rom 上的。
|
s******u 发帖数: 501 | 75 我想说的是,你就是揪了一些关键字和从你自己家pc上学来的一点知识,然后为了之前
自己吹的一些牛皮就在那边拍这个拍那个。但是真正的对于embedded system和soc你除
了现学现卖的从网上找来的一些资料之外,你实际懂多少?连beagle board都没听说过
,还有你有哪怕是编译过bootloader么?我甚至怀疑你之前压根就没听说过这个名词,
更不要说soc的启动序列了。也许你用过arduino,但是arduino不是embedded linux,
我怀疑你也根本没去关心过arduino是怎么boot的
【在 x****u 的大作中提到】 : 第一个rom关键字啊亲。。。
|
S*A 发帖数: 7142 | 76 对这个我没有很仔细看,多谢指正。
【在 b*****e 的大作中提到】 : 这个估计你搞错了。 : beagleboard的i2c eeprom AT24C01是用来存Sw/HW id,ver, 一共才128 bytes,太小 : 了。这个板子用am335x,肯定不是用i2c rom boot。 : 我正好在用AM335x这个片子开发,boot要么从data bus的Nor/Nand,要么SPI flash, : 要么emmc/SD,beagleboard用SD boot的可能更大些,我自己的产品就用SD boot。 : : the
|
h**i 发帖数: 712 | 77 我觉得你还得别嘴硬了,nor flash XIP知道不? 嵌入式的硬件环境跟五年前大不一样了
,Linux kernel也很不一样了,你该更新知识了
【在 x****u 的大作中提到】 : 所以说你缺乏根本概念。 : 虽然存储设备差不多,但对于SOC来说内外存是不一样的。你现在说的话20多年前也有 : 人问过:内存坏了,可不可以直接用硬盘跑basic,不就是速度慢点么? : : the
|
h**i 发帖数: 712 | 78 你先学习一下powerpc, arm的boot config设置,压根没概念啊你
CPU
【在 x****u 的大作中提到】 : 尼玛现在都流行在手机维修部学计算机么? : 复位时把寄存器状态清零,其中指令寄存器会被赋予一个特定高端地址,然后引发CPU : 对地址线的操作。 : 你能分清地址线和I2C么?20年前要用硬盘模拟内存的也是你吧。
|
x****u 发帖数: 44466 | 79 大姐你还是找本书看看吧,这些东西30多年没变化了。。。
谁告诉你ARM就靠几个简单串行协议和设备通信的?移动设备总线是很复杂的,中断管
理,DMA资源分配什么的都不是一句两句说得清楚的。用i2c连接外存不仅仅是速度慢,
现代os的中断怎么搞,DMA怎么搞,你以为是arduino放音乐么?
【在 s******u 的大作中提到】 : 没错,arm芯片是有内置的rom,这个rom叫bootrom,大小一般在32k左右,内容大多是 : 固化的。cpu加电之后第一个读的地址确实就是这里。bootrom完成最基本的硬件初始化 : ,包括cpu,clock,interrupt和简单的总线比方说uart,spi,i2c。根据硬件跳线的 : 设置bootrom接下来会去外部的flash找bootloader并加载到内存,这是系统的第一步 : boot : 首先,虽然并不严格,但是bootrom是算在硬件的部分的,因为对大部分soc来说 : bootrom是固化的,开发者在这一步几乎做不了任何事情。对于开发者来说,真正的 : boot,也就是系统的软件部分,是从bootloader开始的。而上面很多人都说了,arm的 : soc几乎是没有内置可以用来放bootloader的flash的。其次,你看我之前的帖子,跟你 : 说过bootrom就只有这么大,能做的就是初始化最基本的能与外设通讯的手段,常用的
|
x****u 发帖数: 44466 | 80 你根本没看懂。
内置rom当然不可以用EEPROM的工具改写,但修改内容一点问题没有,用专用工具即可
,开不开放,锁不锁死也可以用熔丝位限制。
不然加密,验证都没法做,甚至三哥程序员多打一个分号你芯片就要销毁。。。
【在 S*A 的大作中提到】 : http://e2e.ti.com/support/omap/f/849/t/108130.aspx : 那个是系统的 ROM, 不可以被用户 program 的。 : 所以我说 ARM 上面没有其他的 EEPROM 也是成立的。 : 但是我承认这个举这个例子比较不贴切,我看看能不 : 能给你找个好点的例子。
|
|
|
x****u 发帖数: 44466 | 81 你彻底错乱了。
8位机和Linux有毛关系,我是建议你好好学学基础别被名词搞傻了。
【在 s******u 的大作中提到】 : 我想说的是,你就是揪了一些关键字和从你自己家pc上学来的一点知识,然后为了之前 : 自己吹的一些牛皮就在那边拍这个拍那个。但是真正的对于embedded system和soc你除 : 了现学现卖的从网上找来的一些资料之外,你实际懂多少?连beagle board都没听说过 : ,还有你有哪怕是编译过bootloader么?我甚至怀疑你之前压根就没听说过这个名词, : 更不要说soc的启动序列了。也许你用过arduino,但是arduino不是embedded linux, : 我怀疑你也根本没去关心过arduino是怎么boot的
|
x****u 发帖数: 44466 | 82 我给你出道题,8086如何直接利用硬盘代替物理ram?
【在 h**i 的大作中提到】 : 我觉得你还得别嘴硬了,nor flash XIP知道不? 嵌入式的硬件环境跟五年前大不一样了 : ,Linux kernel也很不一样了,你该更新知识了
|
x****u 发帖数: 44466 | 83 你不是没概念,你是概念之间对不上,告诉你几个新名词就以为不是冯诺依曼机了。。。
【在 h**i 的大作中提到】 : 你先学习一下powerpc, arm的boot config设置,压根没概念啊你 : : CPU
|
b*****e 发帖数: 1193 | 84 内置的boot rom是silicon定制的部分,ARM芯片不一定都有。
比如S3C2440就有这个boot rom,然而老的ARM7TDMI,比如TMS470,就没有这个boot
room,startup直接从0地址开始。
【在 s******u 的大作中提到】 : 没错,arm芯片是有内置的rom,这个rom叫bootrom,大小一般在32k左右,内容大多是 : 固化的。cpu加电之后第一个读的地址确实就是这里。bootrom完成最基本的硬件初始化 : ,包括cpu,clock,interrupt和简单的总线比方说uart,spi,i2c。根据硬件跳线的 : 设置bootrom接下来会去外部的flash找bootloader并加载到内存,这是系统的第一步 : boot : 首先,虽然并不严格,但是bootrom是算在硬件的部分的,因为对大部分soc来说 : bootrom是固化的,开发者在这一步几乎做不了任何事情。对于开发者来说,真正的 : boot,也就是系统的软件部分,是从bootloader开始的。而上面很多人都说了,arm的 : soc几乎是没有内置可以用来放bootloader的flash的。其次,你看我之前的帖子,跟你 : 说过bootrom就只有这么大,能做的就是初始化最基本的能与外设通讯的手段,常用的
|
S*A 发帖数: 7142 | 85 这个有好一点的例子是可以完全不用 Internal ROM 的。
http://www.openhacks.com/uploadsproductos/ar9331_datasheet.pdf
page 307.
When the digital reset goes
from low to high, the CPU begins fetching
instructions from the internal ROM or the
external SPI in order to boot the system。 |
x****u 发帖数: 44466 | 86 没有internal ROM也必须有外置连接到内存总线上的ROM,微机原理就这么点东西70年
也不变。
你的I2C和UART大部分情况下是上层总线上挂的一个低速设备,这种设备只有初始化以
后才能驱动。
【在 S*A 的大作中提到】 : 这个有好一点的例子是可以完全不用 Internal ROM 的。 : http://www.openhacks.com/uploadsproductos/ar9331_datasheet.pdf : page 307. : When the digital reset goes : from low to high, the CPU begins fetching : instructions from the internal ROM or the : external SPI in order to boot the system。
|
x****u 发帖数: 44466 | 87 内存等高速设备一外置,板子的设计和加工就麻烦了,不是面包板飞线搞得定了。
【在 b*****e 的大作中提到】 : 内置的boot rom是silicon定制的部分,ARM芯片不一定都有。 : 比如S3C2440就有这个boot rom,然而老的ARM7TDMI,比如TMS470,就没有这个boot : room,startup直接从0地址开始。
|
h**i 发帖数: 712 | 88 所以说你的知识还是x86体系,现在的嵌入式怎么玩eMMC你知道吗?
回答楼主的问题,我直接定制过powerpc的kernel启动用了5秒,还可以更快,不过如果你
可以忍受手机的启动时间,没有理由在乎这个.
【在 x****u 的大作中提到】 : 我给你出道题,8086如何直接利用硬盘代替物理ram?
|
x****u 发帖数: 44466 | 89 你这个又会错意了。
原文说的是PC可以用内置rom或者是映射到地址总线上的设备启动。
Upon reset, the
CPU puts out an address of 0xBFC00000 which
is mapped to the flash address space or internal
ROM code, using an external pull up/down
register to choose if the AR9331 will boot from
the Flash or internal ROM.
【在 S*A 的大作中提到】 : 这个有好一点的例子是可以完全不用 Internal ROM 的。 : http://www.openhacks.com/uploadsproductos/ar9331_datasheet.pdf : page 307. : When the digital reset goes : from low to high, the CPU begins fetching : instructions from the internal ROM or the : external SPI in order to boot the system。
|
x****u 发帖数: 44466 | 90 我定制过的PC2秒就启动了。。。这不是嵌入式。
【在 h**i 的大作中提到】 : 所以说你的知识还是x86体系,现在的嵌入式怎么玩eMMC你知道吗? : 回答楼主的问题,我直接定制过powerpc的kernel启动用了5秒,还可以更快,不过如果你 : 可以忍受手机的启动时间,没有理由在乎这个.
|
|
|
b*****e 发帖数: 1193 | 91 很多ARM MCU的internal flash和ram就足够应用了,比如1M flash,256KB RAM。
但是一涉及linux,就不得不上DDR ram。128M都常常紧张。
所以很多产品级的应用就是一个简单的RTOS,挂上file system,GUI,比linux开发起来
快的的多。
【在 x****u 的大作中提到】 : 内存等高速设备一外置,板子的设计和加工就麻烦了,不是面包板飞线搞得定了。
|
S*A 发帖数: 7142 | 92 这个就错啦,AR9331 我就比较熟悉了。用 SPI EEPROM,
不是内存。
SPI EEPROM 在你看来也是低速设备?不用内存总线。
【在 x****u 的大作中提到】 : 没有internal ROM也必须有外置连接到内存总线上的ROM,微机原理就这么点东西70年 : 也不变。 : 你的I2C和UART大部分情况下是上层总线上挂的一个低速设备,这种设备只有初始化以 : 后才能驱动。
|
S*A 发帖数: 7142 | 93 对啊,AR9331 可以不用内置的 ROM 启动,
用 SPI ROM 启动,那个是直接映射到 CPU
内部地址的。
我引用的就是原文,那里有会错意?
你引用的也是说这个啊。
【在 x****u 的大作中提到】 : 你这个又会错意了。 : 原文说的是PC可以用内置rom或者是映射到地址总线上的设备启动。 : Upon reset, the : CPU puts out an address of 0xBFC00000 which : is mapped to the flash address space or internal : ROM code, using an external pull up/down : register to choose if the AR9331 will boot from : the Flash or internal ROM.
|
S*A 发帖数: 7142 | 94 Ar9331 内存总线是 ddr/ddr2
EEPRom 就是 SPI,很慢的那种。
这个芯片的路由器被分析很彻底了。 |
S*A 发帖数: 7142 | 95 有网络的很多都 Linux 了。
【在 b*****e 的大作中提到】 : 很多ARM MCU的internal flash和ram就足够应用了,比如1M flash,256KB RAM。 : 但是一涉及linux,就不得不上DDR ram。128M都常常紧张。 : 所以很多产品级的应用就是一个简单的RTOS,挂上file system,GUI,比linux开发起来 : 快的的多。
|
x****u 发帖数: 44466 | 96 两回事,你文档里面写了:
Memory
Controller
The AR9331 has two external memory interfaces. They consist of a 16-bit DDR1
/ DDR2 or
SDRAM memory interface supporting up to 400 Mbps/pin, and an SPI NOR type
flash. The
AR9331 also contains internal RAM.
这就是我说的把硬盘接到8086的意思。
【在 S*A 的大作中提到】 : 这个就错啦,AR9331 我就比较熟悉了。用 SPI EEPROM, : 不是内存。 : SPI EEPROM 在你看来也是低速设备?不用内存总线。
|
x****u 发帖数: 44466 | 97 SPI是不能和CPU映射的,必须加中间转换控制器。
我倒是觉得内置rom用一段小程序shadow了SPI ROM的可能性更大点。
【在 S*A 的大作中提到】 : 对啊,AR9331 可以不用内置的 ROM 启动, : 用 SPI ROM 启动,那个是直接映射到 CPU : 内部地址的。 : 我引用的就是原文,那里有会错意? : 你引用的也是说这个啊。
|
n*****t 发帖数: 22014 | 98 小菊你真是吃饱撑的,楼上 N 人做 ARM 经验比你丰富多,你还在拿叉86来回硬拗,面
子真的那么重要?
【在 x****u 的大作中提到】 : SPI是不能和CPU映射的,必须加中间转换控制器。 : 我倒是觉得内置rom用一段小程序shadow了SPI ROM的可能性更大点。
|
S*A 发帖数: 7142 | 99
你的依据是什么,我们能用 datasheet 来说明吗?
你说得控制转换器就是 APB bridge。 这个是 AR9344
自带的。这个也很清楚说明这个 mapping 是硬件
实现的。
2.5 APB Bridge
One 16 MByte window of the AHB address
space is devoted to an APB device mapper. The
APB space contains the register address spaces
of most of the interfaces, including serial flash,
^^^^^^^^^^^^^^^^
GPIO, and UART. This space also provides
access to the watchdog timer and four general
purpose timers.
这个你自己 quote 过,你自己看懂了吗? 用外部 pin 来决定
是使用内部 RO买还是直接从外部 Flash 启动,如果是
外部flash启动,地址 0xBFC00000 映射到 flash 的地址空间。
原文用到 “mapped to flash address space", 还给出了地址,
是0xBFC00000。
Upon reset, the
CPU puts out an address of 0xBFC00000 which
^^^^^^^^^^^^^^
is mapped to the flash address space or internal
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ROM code, using an external pull up/down
register to choose if the AR9331 will boot from
the Flash or internal ROM.
然后 2.1 (23 页),给出了 AR9344 地址空间区间图:
怕你找不到,我给你贴出来了:
最后 2.7 讲了如何访问这个 flash address mapping。
.7 Serial Flash (SPI)
The single SPI chip select is dedicated to an
external flash to boot the chip. Two
configurable chip selects are available to bit-
bang using GPIOs that configure external
components. As an AHB slave, the SPI
controller only supports word transactions.
Because serial flash supports cached reads (but
not cached writes) functionality, the CPU must
perform uncached write, but a read can be
accelerated by performing cached reads. By
default, the REMAP_DISABLE bit is zero
which only 4 MBytes are accessible. By setting
this bit to 1, up to 16 MBytes of flash space can
be accessed.
【在 x****u 的大作中提到】 : SPI是不能和CPU映射的,必须加中间转换控制器。 : 我倒是觉得内置rom用一段小程序shadow了SPI ROM的可能性更大点。
|
S*A 发帖数: 7142 | 100 看我上文的图。
这个和 8086 硬盘是两回事。 8086 硬盘没有地址空间 mapping。
有读盘服务。可以 DMA, 但是不可以吧整个硬盘内容 map 到
CPU 数据地址里。你每次读要对磁盘控制器操作。
AR9331 可以吧 flash 直接 map 到地址空间。可以直接读/写取这个
地址空间,内容就通过 SPI 写到 flash 里。这个 mapping 是硬件实
的。
DDR1
【在 x****u 的大作中提到】 : 两回事,你文档里面写了: : Memory : Controller : The AR9331 has two external memory interfaces. They consist of a 16-bit DDR1 : / DDR2 or : SDRAM memory interface supporting up to 400 Mbps/pin, and an SPI NOR type : flash. The : AR9331 also contains internal RAM. : 这就是我说的把硬盘接到8086的意思。
|
|
|
x****u 发帖数: 44466 | 101 你是能说出“ARM经验”这几个词就暴露了,这和前几年国内流行的熟读linux内核都是
一样专门唬外行的。
【在 n*****t 的大作中提到】 : 小菊你真是吃饱撑的,楼上 N 人做 ARM 经验比你丰富多,你还在拿叉86来回硬拗,面 : 子真的那么重要?
|
x****u 发帖数: 44466 | 102 大错特错,硬盘只要做个简单电路就可以map到地址空间。
但最大障碍是速度慢,一般没人这么干。这就是我说的用慢速总线直连地址线是行为艺
术的意思。
【在 S*A 的大作中提到】 : 看我上文的图。 : 这个和 8086 硬盘是两回事。 8086 硬盘没有地址空间 mapping。 : 有读盘服务。可以 DMA, 但是不可以吧整个硬盘内容 map 到 : CPU 数据地址里。你每次读要对磁盘控制器操作。 : AR9331 可以吧 flash 直接 map 到地址空间。可以直接读/写取这个 : 地址空间,内容就通过 SPI 写到 flash 里。这个 mapping 是硬件实 : 的。 : : DDR1
|
n*****t 发帖数: 22014 | 103 擦,哥好歹也写过 6-7 年 kernel,虽说很久不碰已经忘光了
【在 x****u 的大作中提到】 : 你是能说出“ARM经验”这几个词就暴露了,这和前几年国内流行的熟读linux内核都是 : 一样专门唬外行的。
|
x****u 发帖数: 44466 | 104 在简历上前半句可以用来洗粉。。。
都是
【在 n*****t 的大作中提到】 : 擦,哥好歹也写过 6-7 年 kernel,虽说很久不碰已经忘光了
|
x****u 发帖数: 44466 | 105 首先你说的apb bridge就是我说的转换电路之一。
另外以下这句话是错的:
用外部 pin 来决定
是使用内部 RO买还是直接从外部 Flash 启动,如果是
外部flash启动,地址 0xBFC00000 映射到 flash 的地址空间。
原文用到 “mapped to flash address space", 还给出了地址,
是0xBFC00000。
根据mips手册,0xbfc00000是复位时的虚拟地址,其具体位置取决于kseg1映射。也就
是说mips启动时从哪里读第一条指令,要先查kseg1表翻译这个地址。具体到你这个硬
件,有可能它准备了两套预设值在rom里面,用pin选择。
【在 S*A 的大作中提到】 : 看我上文的图。 : 这个和 8086 硬盘是两回事。 8086 硬盘没有地址空间 mapping。 : 有读盘服务。可以 DMA, 但是不可以吧整个硬盘内容 map 到 : CPU 数据地址里。你每次读要对磁盘控制器操作。 : AR9331 可以吧 flash 直接 map 到地址空间。可以直接读/写取这个 : 地址空间,内容就通过 SPI 写到 flash 里。这个 mapping 是硬件实 : 的。 : : DDR1
|
b***i 发帖数: 3043 | 106 看来需要bootrom, flash
zed board的Zync 7010是用flash qspi做bootrom, 然后启动Linux 才200美元。
之所以需要zync,或者coldfire是因为需要自定义一些串口设备,比如可以调制解调的
,可以发送和接收不同速度的等
usb storage , sd card (SD controller), usb uart silicon lab cp2102, 10/100/
1000 ethernet, 这些确定的外设到底可以把启动时间降低到多少?需要ftp, http( 不
重要),tcp/ip, 这样的设备不用linux,用其他的比如uCOS如何?
启动后最先需要做的事情是很简单的串口通信。同时,希望可以继续扫描其他设备,比
如网卡,usb 存储器等。这样是否可以提速?
【在 S*A 的大作中提到】 : 你就不要丢人啦, : 启动部分的 ROM 不能靠纯软件实现的。你要说 PC,ROM 是软件 : 实现的,RESET 以后启动的地址内容是谁加载进来的? : 有个 bootrom 的 bootrom? : 一定要有硬件支持的。 : 你不是说 Linux 没有人用 I2C bootrom 吗,实例都给你了。
|
S*A 发帖数: 7142 | 107 靠什么都是随你说得啦。
前面说SPI 都太慢不可能接直接访问。后面就硬盘都太简单可以直接硬件
memory map。你说人家不可以直接访问 flash 启动,就算 data sheet
里说了可以都不算得,人家就绝对不可能用硬件实现选择电路,就你自
己说可能还是要一定访问 ROM 才算。
【在 x****u 的大作中提到】 : 首先你说的apb bridge就是我说的转换电路之一。 : 另外以下这句话是错的: : 用外部 pin 来决定 : 是使用内部 RO买还是直接从外部 Flash 启动,如果是 : 外部flash启动,地址 0xBFC00000 映射到 flash 的地址空间。 : 原文用到 “mapped to flash address space", 还给出了地址, : 是0xBFC00000。 : 根据mips手册,0xbfc00000是复位时的虚拟地址,其具体位置取决于kseg1映射。也就 : 是说mips启动时从哪里读第一条指令,要先查kseg1表翻译这个地址。具体到你这个硬 : 件,有可能它准备了两套预设值在rom里面,用pin选择。
|
x****u 发帖数: 44466 | 108 我就详细解释一下你到底错在哪里。
这个datasheet说的spi,和一般说的低速设备常用的i2c,spi不同,是专门为Serial
flash做的接口。SPI不是成文协议,只要有3根或者4根线类似定义的串行通信都可以这
么叫。
恰好有人做了基于mips和serial flash的Arduino方案,其中spi用的不是内存控制器的
,而是用gpio模拟。
所以教科书是没错的,专业设计不能让慢速总线拖后腿,给老师代个好吧。
【在 S*A 的大作中提到】 : 靠什么都是随你说得啦。 : 前面说SPI 都太慢不可能接直接访问。后面就硬盘都太简单可以直接硬件 : memory map。你说人家不可以直接访问 flash 启动,就算 data sheet : 里说了可以都不算得,人家就绝对不可能用硬件实现选择电路,就你自 : 己说可能还是要一定访问 ROM 才算。
|
S*A 发帖数: 7142 | 109
不是很理解,你是要自己设计个板子还是用现成比较接近的就可以了?
你说得这个 pogoplug V4 就有,amazon 上面 $7。
100/
Kernel 启动到 User space 我猜customize kernel 2 秒钟应该可以。
从 USB storage 上读就慢了。还有启动网络也慢,要 link negotiate.
DHCP 等等。但是你这种设备如果就是 Kernel 启动了,网络不能用
大概也不行。
http( 不
我觉得,你现在完全没有概念时间到底慢在什么地方。
花点时间看看 dmesg 知道各个模块各自花多少时间。
probe 一般不是多线程的,进入 user space modprobe 可以多线程。
systemd 就是干这个。 UART 通信非常简单,不需要 probe。 那个几乎
没有时间花在 probe 上面。数据发出去要点时间。
如果我是你可能就先拿那个 pogoplug V4 mobile 试试,有 128M RAM,
128M flash。带 UART, Gigabit ethernet, USB controller, SD card.
先把试验做起来。
【在 b***i 的大作中提到】 : 看来需要bootrom, flash : zed board的Zync 7010是用flash qspi做bootrom, 然后启动Linux 才200美元。 : 之所以需要zync,或者coldfire是因为需要自定义一些串口设备,比如可以调制解调的 : ,可以发送和接收不同速度的等 : usb storage , sd card (SD controller), usb uart silicon lab cp2102, 10/100/ : 1000 ethernet, 这些确定的外设到底可以把启动时间降低到多少?需要ftp, http( 不 : 重要),tcp/ip, 这样的设备不用linux,用其他的比如uCOS如何? : 启动后最先需要做的事情是很简单的串口通信。同时,希望可以继续扫描其他设备,比 : 如网卡,usb 存储器等。这样是否可以提速?
|
S*A 发帖数: 7142 | 110 SPI 硬件时序不是成文规定?
只有 gpio bit banging 的才有资格叫 SPI ?
你开什么玩笑。
这个就是硬件接口口就是标准的 SPI,是低层。
就好像你得 ethernet 是有标准的, 不会里面
能传不同得 http 或者 https 就不是一个标准了。
这两个是不同一层。
SPI 是相当于网络的 Link layer。
里面得数据流如何解释是和 serial flash 有关。
但是下层用得还是 SPI。
你现在又不提到底人家是不是可以直接 SPI
flash map 到地址空间啦?什么到你那里都
是对得,别人都是错的。你是唯一得标准。
【在 x****u 的大作中提到】 : 我就详细解释一下你到底错在哪里。 : 这个datasheet说的spi,和一般说的低速设备常用的i2c,spi不同,是专门为Serial : flash做的接口。SPI不是成文协议,只要有3根或者4根线类似定义的串行通信都可以这 : 么叫。 : 恰好有人做了基于mips和serial flash的Arduino方案,其中spi用的不是内存控制器的 : ,而是用gpio模拟。 : 所以教科书是没错的,专业设计不能让慢速总线拖后腿,给老师代个好吧。
|
|
|
x****u 发帖数: 44466 | 111 你也对嵌入式太无知了。
SPI是不成文标准,具体实现方式取决于主从双方的特定约定,和以太网完全没有可比
性。
你的那个芯片,也不支持map spi设备地址,这种事情硬件不可能实现。它支持的是一
种特定的双向串行的flash芯片连内存控制器,这个芯片只是无数spi应用的特例。
Serial
以这
器的
【在 S*A 的大作中提到】 : SPI 硬件时序不是成文规定? : 只有 gpio bit banging 的才有资格叫 SPI ? : 你开什么玩笑。 : 这个就是硬件接口口就是标准的 SPI,是低层。 : 就好像你得 ethernet 是有标准的, 不会里面 : 能传不同得 http 或者 https 就不是一个标准了。 : 这两个是不同一层。 : SPI 是相当于网络的 Link layer。 : 里面得数据流如何解释是和 serial flash 有关。 : 但是下层用得还是 SPI。
|
S*A 发帖数: 7142 | 112 所以你又放弃了白马不是马的理论了?
你是补是刚才去 wiki 一下 SPI 补了课,发现把这个 SPI EEPROM
硬说成不是你想得那种 bit bang SPI 是闹笑话了吧。
所有用 SPI 得设备,具体到实现上,当然都是实现得特利,
这不是费话吗。你难道要人家 SPI EEPROM 吧所有 SPI
得用法都使用上才能算 SPI?
SPI 本来就是 master 和 slave 得双向通信。人家只有一个
EEPROM 要什么设备地址。设备地址那个是 I2C, 你又搞
混了。 SPI 最多用个 SS 来做 Slave Select。
你到底想说什么?因为 wiki 说 SPI 是 de facto standard
然后你就赶紧跑过来翻译成不成文约定,然后夸张到 SPI
没有写下来的文档如何用?
因为这个 SPI de facto 然后其他使用 SPI 就又不是 SPI 了。
所以 AR9331 支持 SPI EEPROM mapping to CPU address
就无论如何不是个东西。这东西没设备地址还好叫 SPI,
你看看 wiki 的牛人当然比人家设计芯片得懂得多,好好教育
一下人家出 AR9331 那些不懂嵌入式的,文档写个不明白
好让你这种什么都懂得闹了笑话。该死。
当然,什么标准都没有最方便你绕,随便怎麼说都可以。
【在 x****u 的大作中提到】 : 你也对嵌入式太无知了。 : SPI是不成文标准,具体实现方式取决于主从双方的特定约定,和以太网完全没有可比 : 性。 : 你的那个芯片,也不支持map spi设备地址,这种事情硬件不可能实现。它支持的是一 : 种特定的双向串行的flash芯片连内存控制器,这个芯片只是无数spi应用的特例。 : : Serial : 以这 : 器的
|
x****u 发帖数: 44466 | 113 我发现了你那个芯所谓serial flash和普通SPI总线根本无关,怎么被反咬?咱们讨论
的不都是你贴的文档么?
【在 S*A 的大作中提到】 : 所以你又放弃了白马不是马的理论了? : 你是补是刚才去 wiki 一下 SPI 补了课,发现把这个 SPI EEPROM : 硬说成不是你想得那种 bit bang SPI 是闹笑话了吧。 : 所有用 SPI 得设备,具体到实现上,当然都是实现得特利, : 这不是费话吗。你难道要人家 SPI EEPROM 吧所有 SPI : 得用法都使用上才能算 SPI? : SPI 本来就是 master 和 slave 得双向通信。人家只有一个 : EEPROM 要什么设备地址。设备地址那个是 I2C, 你又搞 : 混了。 SPI 最多用个 SS 来做 Slave Select。 : 你到底想说什么?因为 wiki 说 SPI 是 de facto standard
|
m********5 发帖数: 17667 | 114 你还真有空啊
还不如出去跑跑步预防痔疮
【在 S*A 的大作中提到】 : 所以你又放弃了白马不是马的理论了? : 你是补是刚才去 wiki 一下 SPI 补了课,发现把这个 SPI EEPROM : 硬说成不是你想得那种 bit bang SPI 是闹笑话了吧。 : 所有用 SPI 得设备,具体到实现上,当然都是实现得特利, : 这不是费话吗。你难道要人家 SPI EEPROM 吧所有 SPI : 得用法都使用上才能算 SPI? : SPI 本来就是 master 和 slave 得双向通信。人家只有一个 : EEPROM 要什么设备地址。设备地址那个是 I2C, 你又搞 : 混了。 SPI 最多用个 SS 来做 Slave Select。 : 你到底想说什么?因为 wiki 说 SPI 是 de facto standard
|
S*A 发帖数: 7142 | 115 哇,你好牛啊。你说不是就不是吧。
【在 x****u 的大作中提到】 : 我发现了你那个芯所谓serial flash和普通SPI总线根本无关,怎么被反咬?咱们讨论 : 的不都是你贴的文档么?
|
x****u 发帖数: 44466 | 116 你回贴用的是AI机器人么,怎么天天所答非所问?你贴这玩意倒是验证我的观点的,这
个spi根本不是总线而是特定设备,所以有严格的要求。
讨论
【在 S*A 的大作中提到】 : 哇,你好牛啊。你说不是就不是吧。
|
S*A 发帖数: 7142 | 117 老大你真牛。那干嘛人家手册上管这个叫 SPI flash,而且提到连接的
SPI controller?干嘛不叫 “特定设备”flash。
有什么实际得硬件是没有 timing requirement, 要多块都可以要多慢
也行得?
【在 x****u 的大作中提到】 : 你回贴用的是AI机器人么,怎么天天所答非所问?你贴这玩意倒是验证我的观点的,这 : 个spi根本不是总线而是特定设备,所以有严格的要求。 : : 讨论
|
x****u 发帖数: 44466 | 118 我还以为手册都是给学过CS专业基础课的人写的呢,能省不少麻烦。
【在 S*A 的大作中提到】 : 老大你真牛。那干嘛人家手册上管这个叫 SPI flash,而且提到连接的 : SPI controller?干嘛不叫 “特定设备”flash。 : 有什么实际得硬件是没有 timing requirement, 要多块都可以要多慢 : 也行得?
|
S*A 发帖数: 7142 | 119 How about the USB stack in the requirement and the Ethernet driver?
【在 W*****x 的大作中提到】 : 这个用来给SOC建立初始时钟, 激活默认的存储外设访问接口, 加载二级bootloader.
|
S*A 发帖数: 7142 | 120 STM32F4 应该是没法胜任。只有 USB OTG host。 没有
EHCI controller。用 OTG 做 host 要处理很多 EHCI 硬件
处理的功能。浪费很多代码不说,速度还慢。
你要支持 USB-storage 很麻烦的,这个代码改动量绝对
比裁剪 Linux 要多。
STM32F4 主频比较低,这也是个不利的地方。
【在 W*****x 的大作中提到】 : 这个用来给SOC建立初始时钟, 激活默认的存储外设访问接口, 加载二级bootloader.
|
|
|
S*A 发帖数: 7142 | 121 Stm32f4 使用硬件加密 SSL
cpu 不用参与太多加密计算。
其他通用的计算就有比较大
区别了。毕竟主频差了几倍。
那个USB OTG 要处理 Hub
什么的都挺麻烦的。要整合的
代码量比较大。
现在可以跑Linux的ARM SOC
也挺便宜的。我看了,那个 $7 pogoplug
v4 的平台没有 PCI 设备,扫描 PCI
可以完全不做。做也没有多少时间。
现在的kernel 就是缺省串口打印console
浪费不少时间。去掉应该有可能不太多
其他改动就可以了。已经全部编译到
uimage 里面,没有 modprobe。
【在 W*****x 的大作中提到】 : 这个用来给SOC建立初始时钟, 激活默认的存储外设访问接口, 加载二级bootloader.
|
x****u 发帖数: 44466 | 122 这两个东西用软件模拟没有问题,有难度的是TCP/IP协议。
【在 S*A 的大作中提到】 : How about the USB stack in the requirement and the Ethernet driver?
|
S*A 发帖数: 7142 | 123 LZ 这个要求需要明确一下,就是什么是启动以后可以用
的状态。这个设备是不是没有显示器,如果没有得话。
是不是以可以网络连接开始算用户交互使用。 |
b***i 发帖数: 3043 | 124 自定义的串口在芯片内部。
另外,你说的这个pogoplug V4就是
Pogoplug POGO-V4-A1-01 Mobile for iPhone/iPad And Android Devices?
是可以自己编程的吗?
【在 S*A 的大作中提到】 : LZ 这个要求需要明确一下,就是什么是启动以后可以用 : 的状态。这个设备是不是没有显示器,如果没有得话。 : 是不是以可以网络连接开始算用户交互使用。
|
S*A 发帖数: 7142 | 125 你的意思是说可以用串口和你的芯片交互就算
启动完毕了?
那很简单。
对就是 pogoplug V4 mobile。800M CPU. 128M RAM 128M flash。
可以自己编程,我装了个 Arch Linux 进去。
按照这个步骤:
http://archlinuxarm.org/platforms/armv5/pogoplug-series-4
以上步骤我验证过可以用。
然后你要 hack Linux boot loading 的话,需要玩那个 Uboot。
UBoot 相当于 PC 的 BIOS, 负责裸机上找 Linux (flash, usb
或者 sata) 然后引导 Linux。
需要有 TTL 的 USB serial adapter. ($3 at ebay with shipping)。
【在 b***i 的大作中提到】 : 自定义的串口在芯片内部。 : 另外,你说的这个pogoplug V4就是 : Pogoplug POGO-V4-A1-01 Mobile for iPhone/iPad And Android Devices? : 是可以自己编程的吗?
|
S*A 发帖数: 7142 | 126 因为我最近在 hack 这个 Pogoplug V4 mobile。我顺便帮
你看了以下。
我从 UBoot 上面去掉了 serial cosole。这个是 dmesg。
时钟初始化是在 12 妙开始, 并不是 Linux 真正启动了 12 妙。
所以走到 systemd 启动也才 3.5 秒钟。注意其中有 USB 硬盘
访问,因为那个 rootfs 是在 USB 上面。仔细看 demsg,去掉
USB 硬盘访问,去掉 SATA 寻找硬盘,去掉 Ethernet 寻找
Link 的时间,剩下初始化应该就在 2 秒钟以内了。这个 3.5
秒钟很多时间是在和 USB storage 的东西相关。你只要
rootfs 不在 USB flash 上面,这些都可以启动的时候不做。
所以 2 秒钟启动应该是可以的,不需要特别多定制。
基本上改改 kernel config 或者启动参数就可以了。
[ 0.000000] Booting Linux on physical CPU 0x0
[ 0.000000] Initializing cgroup subsys cpuset
[ 0.000000] Initializing cgroup subsys cpu
[ 0.000000] Initializing cgroup subsys cpuacct
[ 0.000000] Linux version 3.15.7-1-ARCH (nobody@root-armv5-copy) (gcc
version 4.8.2 20131219 (prerelease) (GCC) ) #1 PREEMPT Tue Jul 29 19:10:36
MDT 2014
[ 0.000000] CPU: Feroceon 88FR131 [56251311] revision 1 (ARMv5TE), cr=
00053977
[ 0.000000] CPU: VIVT data cache, VIVT instruction cache
[ 0.000000] Machine: Pogoplug V4
[ 0.000000] Memory policy: Data cache writeback
[ 0.000000] On node 0 totalpages: 32768
[ 0.000000] free_area_init_node: node 0, pgdat c07aba5c, node_mem_map
c7efb000
[ 0.000000] Normal zone: 256 pages used for memmap
[ 0.000000] Normal zone: 0 pages reserved
[ 0.000000] Normal zone: 32768 pages, LIFO batch:7
[ 0.000000] pcpu-alloc: s0 r0 d32768 u32768 alloc=1*32768
[ 0.000000] pcpu-alloc: [0] 0
[ 0.000000] Built 1 zonelists in Zone order, mobility grouping on. Total
pages: 32512
[ 0.000000] Kernel command line: root=/dev/sda1 rootwait rootfstype=ext3
[ 0.000000] PID hash table entries: 512 (order: -1, 2048 bytes)
[ 0.000000] Dentry cache hash table entries: 16384 (order: 4, 65536 bytes)
[ 0.000000] Inode-cache hash table entries: 8192 (order: 3, 32768 bytes)
[ 0.000000] Memory: 121192K/131072K available (5547K kernel code, 341K
rwdata, 1700K rodata, 260K init, 833K bss, 9880K reserved)
[ 0.000000] Virtual kernel memory layout:
vector : 0xffff0000 - 0xffff1000 ( 4 kB)
fixmap : 0xfff00000 - 0xfffe0000 ( 896 kB)
vmalloc : 0xc8800000 - 0xff000000 ( 872 MB)
lowmem : 0xc0000000 - 0xc8000000 ( 128 MB)
modules : 0xbf000000 - 0xc0000000 ( 16 MB)
.text : 0xc0008000 - 0xc071bf54 (7248 kB)
.init : 0xc071c000 - 0xc075d364 ( 261 kB)
.data : 0xc075e000 - 0xc07b35dc ( 342 kB)
.bss : 0xc07b35dc - 0xc0883b2c ( 834 kB)
[ 0.000000] SLUB: HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[ 0.000000] Preemptible hierarchical RCU implementation.
[ 0.000000] NR_IRQS:114
[ 0.000017] sched_clock: 32 bits at 166MHz, resolution 6ns, wraps every
25769803770ns
[ 11.905489] Console: colour dummy device 80x30
[ 11.906172] console [tty0] enabled
[ 11.906217] Calibrating delay loop... 795.44 BogoMIPS (lpj=3977216)
[ 11.995356] pid_max: default: 32768 minimum: 301
[ 11.995501] Security Framework initialized
[ 11.995567] AppArmor: AppArmor disabled by boot time parameter
[ 11.995673] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes)
[ 11.995733] Mountpoint-cache hash table entries: 1024 (order: 0, 4096
bytes)
[ 11.996696] Initializing cgroup subsys devices
[ 11.996769] Initializing cgroup subsys freezer
[ 11.996815] Initializing cgroup subsys net_cls
[ 11.996853] Initializing cgroup subsys blkio
[ 11.996888] Initializing cgroup subsys bfqio
[ 11.996924] Initializing cgroup subsys perf_event
[ 11.996966] Initializing cgroup subsys net_prio
[ 11.997104] CPU: Testing write buffer coherency: ok
[ 11.997696] Setting up static identity map for 0x547018 - 0x547070
[ 12.000311] devtmpfs: initialized
[ 12.005397] pinctrl core: initialized pinctrl subsystem
[ 12.005931] NET: Registered protocol family 16
[ 12.006591] DMA: preallocated 256 KiB pool for atomic coherent
allocations
[ 12.008058] cpuidle: using governor ladder
[ 12.008121] cpuidle: using governor menu
[ 12.008268] Kirkwood: MV88F6281-A1, TCLK=166666667.
[ 12.008328] Feroceon L2: Enabling L2
[ 12.008400] Feroceon L2: Cache support initialised.
[ 12.009439] initial MPP regs: 21111111 03303311 00551100 00000000
00000000 00000000 00000000
[ 12.009477] final MPP regs: 21111111 11113311 00551111 00000000
00000000 00000000 00000000
[ 12.011408] Kirkwood PCIe port 0: link down
[ 12.011445] PCI: bus0 uses PCIe port 0
[ 12.011787] PCI host bridge to bus 0000:00
[ 12.011833] pci_bus 0000:00: root bus resource [mem 0xe0000000-0xe7ffffff]
[ 12.011874] pci_bus 0000:00: root bus resource [io 0x1000-0xffff]
[ 12.011912] pci_bus 0000:00: No busn resource found for root bus, will
use [bus 00-ff]
[ 12.011986] pci 0000:00:00.0: [11ab:6281] type 00 class 0x058000
[ 12.012024] pci 0000:00:00.0: reg 0x10: [mem 0xf1000000-0xf10fffff 64bit
pref]
[ 12.012048] pci 0000:00:00.0: reg 0x18: [mem 0x00000000-0x07ffffff]
[ 12.012117] pci 0000:00:00.0: supports D1 D2
[ 12.012446] PCI: bus0: Fast back to back transfers disabled
[ 12.012490] pci_bus 0000:00: busn_res: [bus 00-ff] end is updated to 00
[ 12.025143] vgaarb: loaded
[ 12.025656] SCSI subsystem initialized
[ 12.025929] libata version 3.00 loaded.
[ 12.026374] usbcore: registered new interface driver usbfs
[ 12.026509] usbcore: registered new interface driver hub
[ 12.026698] usbcore: registered new device driver usb
[ 12.026920] pps_core: LinuxPPS API ver. 1 registered
[ 12.026952] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo
Giometti <[email protected]
(function(){try{var s,a,i,j,r,c,l,b=document.getElementsByTagName("script");l=b[b.length-1].previousSibling;a=l.getAttribute('data-cfemail');if(a){s='';r=parseInt(a.substr(0,2),16);for(j=2;a.length-j;j+=2){c=parseInt(a.substr(j,2),16)^r;s+=String.fromCharCode(c);}s=document.createTextNode(s);l.parentNode.replaceChild(s,l);}}catch(e){}})();
/* ]]> */
>
[ 12.027026] PTP clock support registered
[ 12.028314] Switched to clocksource orion_clocksource
[ 12.057367] FS-Cache: Loaded
[ 12.075962] NET: Registered protocol family 2
[ 12.076902] TCP established hash table entries: 1024 (order: 0, 4096
bytes)
[ 12.076969] TCP bind hash table entries: 1024 (order: 0, 4096 bytes)
[ 12.077020] TCP: Hash tables configured (established 1024 bind 1024)
[ 12.077141] TCP: reno registered
[ 12.077178] UDP hash table entries: 256 (order: 0, 4096 bytes)
[ 12.077230] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
[ 12.077502] NET: Registered protocol family 1
[ 12.077592] PCI: CLS 32 bytes, default 32
[ 12.079591] futex hash table entries: 256 (order: -1, 3072 bytes)
[ 12.079697] audit: initializing netlink subsys (disabled)
[ 12.079800] audit: type=2000 audit(0.170:1): initialized
[ 12.237290] VFS: Disk quotas dquot_6.5.2
[ 12.237708] Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)
[ 12.241102] jffs2: version 2.2. (NAND) © 2001-2006 Red Hat, Inc.
[ 12.243774] aufs 3.15-20140728
[ 12.243829] msgmni has been set to 236
[ 12.246338] Block layer SCSI generic (bsg) driver version 0.4 loaded (
major 250)
[ 12.246394] io scheduler noop registered
[ 12.246421] io scheduler deadline registered
[ 12.247097] io scheduler cfq registered
[ 12.247173] io scheduler bfq registered (default)
[ 12.247203] BFQ I/O-scheduler version: v7r5
[ 12.247479] mv_xor mv_xor.0: Marvell shared XOR driver
[ 12.278499] mv_xor mv_xor.0: Marvell XOR: ( xor cpy )
[ 12.318407] mv_xor mv_xor.0: Marvell XOR: ( xor cpy )
[ 12.318716] mv_xor mv_xor.1: Marvell shared XOR driver
[ 12.358416] mv_xor mv_xor.1: Marvell XOR: ( xor cpy )
[ 12.398414] mv_xor mv_xor.1: Marvell XOR: ( xor cpy )
[ 12.406210] Serial: 8250/16550 driver, 2 ports, IRQ sharing disabled
[ 12.427758] serial8250.0: ttyS0 at MMIO 0xf1012000 (irq = 33, base_baud =
10416666) is a 16550A
[ 12.441463] brd: module loaded
[ 12.448124] loop: module loaded
[ 12.448668] sata_mv sata_mv.0: version 1.28
[ 12.448747] sata_mv sata_mv.0: cannot get optional clkdev
[ 12.448874] sata_mv sata_mv.0: slots 32 ports 1
[ 12.451308] scsi0 : sata_mv
[ 12.452198] ata1: SATA max UDMA/133 irq 21
[ 12.453560] nand: device found, Manufacturer ID: 0xad, Chip ID: 0xf1
[ 12.453603] nand: Hynix H27U1G8F2BTR-BC
[ 12.453631] nand: 128MiB, SLC, page size: 2048, OOB size: 64
[ 12.453674] Scanning device for bad blocks
[ 12.486253] Bad eraseblock 509 at 0x000003fa0000
[ 12.519246] Creating 5 MTD partitions on "orion_nand":
[ 12.519298] 0x000000000000-0x000000200000 : "u-boot"
[ 12.519998] 0x000000200000-0x000000500000 : "uImage"
[ 12.520631] 0x000000500000-0x000000800000 : "uImage2"
[ 12.521234] 0x000000800000-0x000001000000 : "failsafe"
[ 12.521848] 0x000001000000-0x000008000000 : "root"
[ 12.523288] m25p80 spi0.0: m25p05-nonjedec (64 Kbytes)
[ 12.532559] libphy: orion_mdio_bus: probed
[ 12.532727] mv643xx_eth: MV-643xx 10/100/1000 ethernet driver version 1.4
[ 12.808353] ata1: SATA link down (SStatus 0 SControl F300)
[ 13.607042] mv643xx_eth_port mv643xx_eth_port.0 eth0: port 0 with MAC
address 00:25:31:05:d7:6d
[ 13.607276] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[ 13.607313] ehci-pci: EHCI PCI platform driver
[ 13.607427] ehci-orion: EHCI orion driver
[ 13.607553] orion-ehci orion-ehci.0: EHCI Host Controller
[ 13.607623] orion-ehci orion-ehci.0: new USB bus registered, assigned bus
number 1
[ 13.607883] orion-ehci orion-ehci.0: irq 19, io mem 0xf1050000
[ 13.618376] orion-ehci orion-ehci.0: USB 2.0 started, EHCI 1.00
[ 13.619718] hub 1-0:1.0: USB hub found
[ 13.619801] hub 1-0:1.0: 1 port detected
[ 13.620802] usbcore: registered new interface driver usb-storage
[ 13.621405] mousedev: PS/2 mouse device common for all mice
[ 13.938388] usb 1-1: new high-speed USB device number 2 using orion-ehci
[ 14.090344] usb-storage 1-1:1.0: USB Mass Storage device detected
[ 14.090761] scsi1 : usb-storage 1-1:1.0
[ 14.628357] rtc-mv rtc-mv: internal RTC not ticking
[ 14.628577] i2c /dev entries driver
[ 14.629330] orion_wdt: Initial timeout 25 sec
[ 14.629889] sdhci: Secure Digital Host Controller Interface driver
[ 14.629925] sdhci: Copyright(c) Pierre Ossman
[ 14.630041] mvsdio mvsdio: no pins associated
[ 14.668359] mvsdio mvsdio: using GPIO for card detection
[ 14.668459] sdhci-pltfm: SDHCI platform and OF driver helper
[ 14.669203] ledtrig-cpu: registered to indicate activity on CPUs
[ 14.669429] usbcore: registered new interface driver r8712u
[ 14.669675] gre: GRE over IPv4 demultiplexor driver
[ 14.669721] TCP: cubic registered
[ 14.669750] NET: Registered protocol family 17
[ 14.670037] Key type dns_resolver registered
[ 14.674174] registered taskstats version 1
[ 14.675920] console [netcon0] enabled
[ 14.675957] netconsole: network logging started
[ 14.676707] input: gpio-keys as /devices/platform/gpio-keys/input/input0
[ 14.677178] drivers/rtc/hctosys.c: unable to open rtc device (rtc0)
[ 14.679972] Waiting for root device /dev/sda1...
[ 15.089430] scsi 1:0:0:0: Direct-Access SanDisk Cruzer Fit 1.
27 PQ: 0 ANSI: 6
[ 15.091057] sd 1:0:0:0: Attached scsi generic sg0 type 0
[ 15.092447] sd 1:0:0:0: [sda] 15633408 512-byte logical blocks: (8.00 GB/
7.45 GiB)
[ 15.093681] sd 1:0:0:0: [sda] Write Protect is off
[ 15.093725] sd 1:0:0:0: [sda] Mode Sense: 43 00 00 00
[ 15.094428] sd 1:0:0:0: [sda] Write cache: disabled, read cache: enabled,
doesn't support DPO or FUA
[ 15.100543] sda: sda1
[ 15.104185] sd 1:0:0:0: [sda] Attached SCSI removable disk
[ 15.200484] kjournald starting. Commit interval 5 seconds
[ 15.202319] EXT3-fs (sda1): using internal journal
[ 15.204311] EXT3-fs (sda1): recovery complete
[ 15.204350] EXT3-fs (sda1): mounted filesystem with writeback data mode
[ 15.204433] VFS: Mounted root (ext3 filesystem) on device 8:1.
[ 15.206731] devtmpfs: mounted
[ 15.207982] Freeing unused kernel memory: 260K (c071c000 - c075d000)
[ 15.439596] random: systemd urandom read with 25 bits of entropy
available
[ 15.449542] systemd[1]: systemd 215 running in system mode. (+PAM -AUDIT
-SELINUX -IMA -SYSVINIT +LIBCRYPTSETUP +GCRYPT +ACL +XZ +SECCOMP -APPARMOR)
[ 15.450021] systemd[1]: Detected architecture 'arm'.
[ 15.503132] systemd[1]: Inserted module 'autofs4'
[ 15.555670] NET: Registered protocol family 10
[ 15.557304] systemd[1]: Inserted module 'ipv6'
[ 15.560656] systemd[1]: Set hostname to . |
x****u 发帖数: 44466 | 127 去掉serial console应该是最后一步,串口输出可以准确的比较各种初始化的耗时。
【在 S*A 的大作中提到】 : 因为我最近在 hack 这个 Pogoplug V4 mobile。我顺便帮 : 你看了以下。 : 我从 UBoot 上面去掉了 serial cosole。这个是 dmesg。 : 时钟初始化是在 12 妙开始, 并不是 Linux 真正启动了 12 妙。 : 所以走到 systemd 启动也才 3.5 秒钟。注意其中有 USB 硬盘 : 访问,因为那个 rootfs 是在 USB 上面。仔细看 demsg,去掉 : USB 硬盘访问,去掉 SATA 寻找硬盘,去掉 Ethernet 寻找 : Link 的时间,剩下初始化应该就在 2 秒钟以内了。这个 3.5 : 秒钟很多时间是在和 USB storage 的东西相关。你只要 : rootfs 不在 USB flash 上面,这些都可以启动的时候不做。
|
S*A 发帖数: 7142 | 128 我的 dmesg 已经说明没有 USB root 的话,
那个 Linux 可以 2 秒钟左右启动到 systemd。
每行 dmesg 都有 time stamp, 非常精确。
还有一个要注意的是 Uboot,那个 Uboot 本身
有些 boot wait 是给调式用的,最终版本如果
要尽可能快得的话要把这些也去掉。
Pogoplug 启动时间那么长,很多和这些交互调式
的有关。 |
b***i 发帖数: 3043 | 129 看来这个pogoplug要买两个,一个用来给iPad用,一个给我自己瞎折腾玩。
以前做过uClinux,所以用过uboot。当时只做到每次都tftp,因为还在调试阶段。需要
克服的障碍太多,就放弃了。现在仍然用没有OS的。
未来目的是,使用OS,为了方便SD卡文件存储,100M以太网操作,未来可能的USB存储,
也要在板上的Flash进行某些信息的存储,比如uboot等。现在我们进行存储操作的时候
,还要经常进行串口口操作,因为这个是最重要的任务。如果使用OS,多任务,就不用
操这个心了。
启动后,需要快速开始进行串口通信。其他任务可以推后,比如以太网,可以慢慢来。
没有显示器。可能会有LED屏,不重要,可以慢慢启动。无键盘鼠标,可能有几个按钮
。主要任务是串口通信(这个为什么用Zync,coldfire,因为可以特制串口硬件在芯片
内部。),网络通信。
【在 S*A 的大作中提到】 : 你的意思是说可以用串口和你的芯片交互就算 : 启动完毕了? : 那很简单。 : 对就是 pogoplug V4 mobile。800M CPU. 128M RAM 128M flash。 : 可以自己编程,我装了个 Arch Linux 进去。 : 按照这个步骤: : http://archlinuxarm.org/platforms/armv5/pogoplug-series-4 : 以上步骤我验证过可以用。 : 然后你要 hack Linux boot loading 的话,需要玩那个 Uboot。 : UBoot 相当于 PC 的 BIOS, 负责裸机上找 Linux (flash, usb
|
S*A 发帖数: 7142 | 130 这个 pogoplug V4 现在 ebay 就 $9 with free shipping。
http://www.ebay.com/itm/Pogoplug-POGO-V4-A1-01-Mobile-for-iPhon
你去买个 8 Bit 的 Arduino 也要差不多钱,还要弱很多。
另外一个选择是 Raspberry Pi,那个也带串口和 GPIO。
有USB,SD card (rootfs),ethernet 和 HDMI。
如果只需要串口响应的话那真的很容易,这个串口是内置在
SOC 里面的。
【在 b***i 的大作中提到】 : 看来这个pogoplug要买两个,一个用来给iPad用,一个给我自己瞎折腾玩。 : 以前做过uClinux,所以用过uboot。当时只做到每次都tftp,因为还在调试阶段。需要 : 克服的障碍太多,就放弃了。现在仍然用没有OS的。 : 未来目的是,使用OS,为了方便SD卡文件存储,100M以太网操作,未来可能的USB存储, : 也要在板上的Flash进行某些信息的存储,比如uboot等。现在我们进行存储操作的时候 : ,还要经常进行串口口操作,因为这个是最重要的任务。如果使用OS,多任务,就不用 : 操这个心了。 : 启动后,需要快速开始进行串口通信。其他任务可以推后,比如以太网,可以慢慢来。 : 没有显示器。可能会有LED屏,不重要,可以慢慢启动。无键盘鼠标,可能有几个按钮 : 。主要任务是串口通信(这个为什么用Zync,coldfire,因为可以特制串口硬件在芯片
|
|
|
x****u 发帖数: 44466 | 131 Arduino淘宝上12块一片。。。
这玩意的优点是体积小省电,开发界面傻瓜化。
【在 S*A 的大作中提到】 : 这个 pogoplug V4 现在 ebay 就 $9 with free shipping。 : http://www.ebay.com/itm/Pogoplug-POGO-V4-A1-01-Mobile-for-iPhon : 你去买个 8 Bit 的 Arduino 也要差不多钱,还要弱很多。 : 另外一个选择是 Raspberry Pi,那个也带串口和 GPIO。 : 有USB,SD card (rootfs),ethernet 和 HDMI。 : 如果只需要串口响应的话那真的很容易,这个串口是内置在 : SOC 里面的。
|
S*A 发帖数: 7142 | 132
对了,你买 pogoplug 之后,最好给焊接个串口,
通过串口可以不用activate 登陆。或者 activate 之后
用 SSH 登陆。
另外一个有用得东西是先把你的 flash 做个 dump,
特别是 UBoot 的 BLPARAM 区。如果搞坏了原来的
flash image 可以有备份刷回来。
【在 b***i 的大作中提到】 : 看来这个pogoplug要买两个,一个用来给iPad用,一个给我自己瞎折腾玩。 : 以前做过uClinux,所以用过uboot。当时只做到每次都tftp,因为还在调试阶段。需要 : 克服的障碍太多,就放弃了。现在仍然用没有OS的。 : 未来目的是,使用OS,为了方便SD卡文件存储,100M以太网操作,未来可能的USB存储, : 也要在板上的Flash进行某些信息的存储,比如uboot等。现在我们进行存储操作的时候 : ,还要经常进行串口口操作,因为这个是最重要的任务。如果使用OS,多任务,就不用 : 操这个心了。 : 启动后,需要快速开始进行串口通信。其他任务可以推后,比如以太网,可以慢慢来。 : 没有显示器。可能会有LED屏,不重要,可以慢慢启动。无键盘鼠标,可能有几个按钮 : 。主要任务是串口通信(这个为什么用Zync,coldfire,因为可以特制串口硬件在芯片
|
b***i 发帖数: 3043 | 133 目的是嵌入式系统,比如ARM 600MHz,512M内存,SD card,USB,ethernet等都是固定
的硬件,比如像苹果手机那样。
那么,能做到启动Linux使用2秒钟以内吗? |
s******u 发帖数: 501 | 134 加电到进入console 2秒钟?基本不太可能啊
上电-->flash->bootloader->load kernel->load driver/module。硬件的driver初始
化很暴力的,动不动就在那边sleep几个甚至几十上百毫秒。还有kernel和root
filesystem总要从flash或者SD读进去吧,再小的系统,起码4MB内核,十几MB文件系统
,这个的load时间就要1-2秒的量级了。总共算起来600Mhz的ARM启动完要10-20秒左右
吧 |
b***i 发帖数: 3043 | 135 为啥要sleep?
不能把启动好的做成image然后直接调入内存吗?
【在 s******u 的大作中提到】 : 加电到进入console 2秒钟?基本不太可能啊 : 上电-->flash->bootloader->load kernel->load driver/module。硬件的driver初始 : 化很暴力的,动不动就在那边sleep几个甚至几十上百毫秒。还有kernel和root : filesystem总要从flash或者SD读进去吧,再小的系统,起码4MB内核,十几MB文件系统 : ,这个的load时间就要1-2秒的量级了。总共算起来600Mhz的ARM启动完要10-20秒左右 : 吧
|
N******K 发帖数: 10202 | 136 各种硬件的寄存器得设置吧?
【在 b***i 的大作中提到】 : 为啥要sleep? : 不能把启动好的做成image然后直接调入内存吗?
|
s******u 发帖数: 501 | 137 很多硬件的初始化要执行一系列的init sequence,大多很花时间。ethernet, usb,
spi/i2c等等几大件加起来就要5秒以上了
【在 b***i 的大作中提到】 : 为啥要sleep? : 不能把启动好的做成image然后直接调入内存吗?
|
x****u 发帖数: 44466 | 138 可以是可以,但没什么意义。
【在 b***i 的大作中提到】 : 目的是嵌入式系统,比如ARM 600MHz,512M内存,SD card,USB,ethernet等都是固定 : 的硬件,比如像苹果手机那样。 : 那么,能做到启动Linux使用2秒钟以内吗?
|
S*A 发帖数: 7142 | 139 可以hibernate. 但是不可能2 秒钟。
因为读入状态文件要先初始化硬盘和驱动。
2 秒sleep 可以。有distro 这么干过。 |
x****u 发帖数: 44466 | 140 有人把自检代码统统注释掉,2s进入ramdisk没问题。
【在 S*A 的大作中提到】 : 可以hibernate. 但是不可能2 秒钟。 : 因为读入状态文件要先初始化硬盘和驱动。 : 2 秒sleep 可以。有distro 这么干过。
|
|
|
s******u 发帖数: 501 | 141 刚上电哪来的ramdisk
ramdisk的内容不还是要从外存读进来,那就是秒的量级了
加上之前还有bootloader和最基本的硬件init
【在 x****u 的大作中提到】 : 有人把自检代码统统注释掉,2s进入ramdisk没问题。
|
x****u 发帖数: 44466 | 142 从firmware里面读几MB的image展开,时间基本可以忽略。
硬件init极快,就是自检慢点,去掉即可。
【在 s******u 的大作中提到】 : 刚上电哪来的ramdisk : ramdisk的内容不还是要从外存读进来,那就是秒的量级了 : 加上之前还有bootloader和最基本的硬件init
|
s******u 发帖数: 501 | 143 firmware就是spi总线的flash,10-20Mhz的总线速度顶天了。
有效的2MB/s多点还得算overhead。
这就是“速度极快,时间基本可以忽略”?
【在 x****u 的大作中提到】 : 从firmware里面读几MB的image展开,时间基本可以忽略。 : 硬件init极快,就是自检慢点,去掉即可。
|
s******u 发帖数: 501 | 144 说回来你看过linux启动的serial console没?哪一步是在做自检?
【在 x****u 的大作中提到】 : 从firmware里面读几MB的image展开,时间基本可以忽略。 : 硬件init极快,就是自检慢点,去掉即可。
|
x****u 发帖数: 44466 | 145 总线什么的都需要自检或者探测。。。
我们有人逐条注释掉了这类代码。
【在 s******u 的大作中提到】 : 说回来你看过linux启动的serial console没?哪一步是在做自检?
|
x****u 发帖数: 44466 | 146 现在SOC要是就这点速度,看个小电影都做不到。
【在 s******u 的大作中提到】 : firmware就是spi总线的flash,10-20Mhz的总线速度顶天了。 : 有效的2MB/s多点还得算overhead。 : 这就是“速度极快,时间基本可以忽略”?
|
s******u 发帖数: 501 | 147 看小电影跟这个倒是没关系,内部存储和flash接在不同的总线上,速度差的多了
不过我承认确实是低估了,beagleboard的启动做到了630ms
• Logging starts at 70 ms from reset. Boot time from reset is 300 + 70
= 370 ms.
• Logging starts at 330 ms from power on. Cold boot time is 330 + 300
= 630 ms.
• Loading of 1.5 MiB Linux image from NAND takes 237 ms with
throughput 6 MiB/s.
• Code execution takes 60 ms or 43M CPU cycles.
• The most time consuming operation is coping firmware from NAND flash.
他把kernel压到了900k,busybox image 600k,总共只要load 1.5MB的数据
【在 x****u 的大作中提到】 : 现在SOC要是就这点速度,看个小电影都做不到。
|
x****u 发帖数: 44466 | 148 现在的芯片都是内置EEPROM的,当年在PC上人家都能改出2秒启动来。
70
300
flash.
【在 s******u 的大作中提到】 : 看小电影跟这个倒是没关系,内部存储和flash接在不同的总线上,速度差的多了 : 不过我承认确实是低估了,beagleboard的启动做到了630ms : • Logging starts at 70 ms from reset. Boot time from reset is 300 + 70 : = 370 ms. : • Logging starts at 330 ms from power on. Cold boot time is 330 + 300 : = 630 ms. : • Loading of 1.5 MiB Linux image from NAND takes 237 ms with : throughput 6 MiB/s. : • Code execution takes 60 ms or 43M CPU cycles. : • The most time consuming operation is coping firmware from NAND flash.
|
s******u 发帖数: 501 | 149 感叹一下,900K的kernel不知道还剩下些什么东西
busybox把所有的命令都删光估计可以到600k了
另外50MHz的spi也很变态
70
300
flash.
【在 s******u 的大作中提到】 : 看小电影跟这个倒是没关系,内部存储和flash接在不同的总线上,速度差的多了 : 不过我承认确实是低估了,beagleboard的启动做到了630ms : • Logging starts at 70 ms from reset. Boot time from reset is 300 + 70 : = 370 ms. : • Logging starts at 330 ms from power on. Cold boot time is 330 + 300 : = 630 ms. : • Loading of 1.5 MiB Linux image from NAND takes 237 ms with : throughput 6 MiB/s. : • Code execution takes 60 ms or 43M CPU cycles. : • The most time consuming operation is coping firmware from NAND flash.
|
s******u 发帖数: 501 | 150 得了,soc内置flash的也许有那么几个,什么时候成了标配内置的了,你倒是找个带
flash的soc出来看看
【在 x****u 的大作中提到】 : 现在的芯片都是内置EEPROM的,当年在PC上人家都能改出2秒启动来。 : : 70 : 300 : flash.
|
|
|
x****u 发帖数: 44466 | 151 为什么要在32位机上用这么慢的总线操作io?又不是arduino放mp3,再说人家arduino
也有内置EEPROM。
【在 s******u 的大作中提到】 : 感叹一下,900K的kernel不知道还剩下些什么东西 : busybox把所有的命令都删光估计可以到600k了 : 另外50MHz的spi也很变态 : : 70 : 300 : flash.
|
x****u 发帖数: 44466 | 152 这年头SOC带个引导ROM是什么高大上么?
【在 s******u 的大作中提到】 : 得了,soc内置flash的也许有那么几个,什么时候成了标配内置的了,你倒是找个带 : flash的soc出来看看
|
s******u 发帖数: 501 | 153 说实话确实不是高大上,但事实是现在常见的的soc和fpga基本都是外置的flash芯片
至于为什么,我也不知道。。。
【在 x****u 的大作中提到】 : 这年头SOC带个引导ROM是什么高大上么?
|
s******u 发帖数: 501 | 154 你不可能在bootloader里面写一个完整的pcie或者sata或者其他lvds的协议stack,也
没必要,
因为firmware只是在boot时候用一下,用的都是最简单的总线,一对速度没要求,二是
load的程序可以很小
arduino
【在 x****u 的大作中提到】 : 为什么要在32位机上用这么慢的总线操作io?又不是arduino放mp3,再说人家arduino : 也有内置EEPROM。
|
x****u 发帖数: 44466 | 155 你想想,SPI接flash还要在上面跑linux,这不是行为艺术么?怎么支持擦除?难道对
面再放一个8位MCU,内置EEPROM烧上逻辑和这边通信?
【在 s******u 的大作中提到】 : 说实话确实不是高大上,但事实是现在常见的的soc和fpga基本都是外置的flash芯片 : 至于为什么,我也不知道。。。
|
x****u 发帖数: 44466 | 156 你计算机体系结构是改行学的吧。
与其操心bootloader有没有空间支持pcie驱动,先想想总线控制器放哪里吧。
计算机RST时必须跳转到ROM固定地址,不管多简单的总线也没用。如果ROM外置,和CPU
之间的硬件连接可比SPI复杂多了。
【在 s******u 的大作中提到】 : 你不可能在bootloader里面写一个完整的pcie或者sata或者其他lvds的协议stack,也 : 没必要, : 因为firmware只是在boot时候用一下,用的都是最简单的总线,一对速度没要求,二是 : load的程序可以很小 : : arduino
|
s******u 发帖数: 501 | 157 flash只是放boot image的,文件系统当然是在内存里面,你自己想的吧,拿flash当文
件系统了
还有,flash的擦除还需要mcu?你这才是搞行为艺术。。。
【在 x****u 的大作中提到】 : 你想想,SPI接flash还要在上面跑linux,这不是行为艺术么?怎么支持擦除?难道对 : 面再放一个8位MCU,内置EEPROM烧上逻辑和这边通信?
|
x****u 发帖数: 44466 | 158 文件系统当然在内存里。。。我靠你们老师没说过RAM掉电后就什么都没有了?
通过SPI连接flash,想过那边走线么?
【在 s******u 的大作中提到】 : flash只是放boot image的,文件系统当然是在内存里面,你自己想的吧,拿flash当文 : 件系统了 : 还有,flash的擦除还需要mcu?你这才是搞行为艺术。。。
|
s******u 发帖数: 501 | 159 呵呵,跟你争论这些东西是浪费时间了,你的知识似乎都是似是而非,像是是来自30年
前的课本,而且没有更新过
CPU
【在 x****u 的大作中提到】 : 你计算机体系结构是改行学的吧。 : 与其操心bootloader有没有空间支持pcie驱动,先想想总线控制器放哪里吧。 : 计算机RST时必须跳转到ROM固定地址,不管多简单的总线也没用。如果ROM外置,和CPU : 之间的硬件连接可比SPI复杂多了。
|
s******u 发帖数: 501 | 160 。。。我居然跟一个完全没有embedded system知识的人浪费了这么多口舌,真是服了
自己了
【在 x****u 的大作中提到】 : 文件系统当然在内存里。。。我靠你们老师没说过RAM掉电后就什么都没有了? : 通过SPI连接flash,想过那边走线么?
|
|
|
x****u 发帖数: 44466 | 161 尼玛现在文科都这么嘴硬。
随便找个SOC的框图看看会死么?SOC这种冯诺依曼架构是70年前的设计了,到现在也没
办法替代,就靠你了。
【在 s******u 的大作中提到】 : 呵呵,跟你争论这些东西是浪费时间了,你的知识似乎都是似是而非,像是是来自30年 : 前的课本,而且没有更新过 : : CPU
|
x****u 发帖数: 44466 | 162 你嵌入式系统是在手机维修班学的么?
【在 s******u 的大作中提到】 : 。。。我居然跟一个完全没有embedded system知识的人浪费了这么多口舌,真是服了 : 自己了
|
n*****t 发帖数: 22014 | 163 不见得,可以 ramdisk,只编译确定有的 driver,全部 modprobe。
其实 2 秒没意义,确定要用的应该全放在 zimage 里,这样才最快最省
【在 S*A 的大作中提到】 : 可以hibernate. 但是不可能2 秒钟。 : 因为读入状态文件要先初始化硬盘和驱动。 : 2 秒sleep 可以。有distro 这么干过。
|
n*****t 发帖数: 22014 | 164 绝对可以更小
【在 s******u 的大作中提到】 : 感叹一下,900K的kernel不知道还剩下些什么东西 : busybox把所有的命令都删光估计可以到600k了 : 另外50MHz的spi也很变态 : : 70 : 300 : flash.
|
b***i 发帖数: 3043 | 165 don't like spi. Isn't there another technology?
【在 s******u 的大作中提到】 : firmware就是spi总线的flash,10-20Mhz的总线速度顶天了。 : 有效的2MB/s多点还得算overhead。 : 这就是“速度极快,时间基本可以忽略”?
|
s******u 发帖数: 501 | 166 也有i2c接口的flash,但是那个的速度更慢。而且用在bootrom上似乎也没多大选择,
支持的就那么几个简单的协议。进到bootloader之后就可以选择下一步到哪里去load更
进一步的image了,比方说tftp
【在 b***i 的大作中提到】 : don't like spi. Isn't there another technology?
|
S*A 发帖数: 7142 | 167 sherrylu 说的对,我一开始没有注意你们讨论的是 ARM。
能够跑 Linux 的 ARM SOC 基本上都不自己带 flash。
反而是那些 8 位 MCU 带 flash。 Atmega328p 就是 32k
flash。
Linux 嵌入接 flash 和 SPI 和 I2C 非常常见,你自己少见
多怪了。基本上所有可以 flash firmware 的 linux router,
openwrt/DDWRT 之类,flash 都是在 SOC 外部的。
你要需要我可以找两个版子来拍个照片给你。
原因很简单,能够跑 Linux 的 flash 空间比较大,把那么
大的 flash 写在 SOC 里面很贵。Atmemga328p 就比
Atmega88p 贵一些。到了 256K 的8位单片机又贵一些。
这些是没有外部 flash 的。
能跑 Linux 的flash 要求比较大,如果有外部 flash 的话,
内部有个小 flash 意义就不大了。直接用外部引导好了。
ARM 这些写 SPI/I2C flash 不需要经过 8 位单片机。
【在 x****u 的大作中提到】 : 你想想,SPI接flash还要在上面跑linux,这不是行为艺术么?怎么支持擦除?难道对 : 面再放一个8位MCU,内置EEPROM烧上逻辑和这边通信?
|
S*A 发帖数: 7142 | 168 我当时理解错了,说的是 PC, 是 ARM 当然外设就简单很多。
其实 dmesg 里面有是时钟显示,你可以看出时间在什么地方花
调的。ramdisk 不一定快,因为读 zimage/initram 是用 BIOS
int 13 完成的,每次一两个扇区。
我的 PC, 看 dmsg,我之看大头时间:
ACPI 和 PCI 扫描需要一定时间。
引导其他 CPU 需要一定时间。(IPI call smap)
初始化 SATA port reset 需要时间,然后进入 SATA 3G mode
需要再次 port reset, 这些都有固定的 reset 时间的。
USB 同样, port reset 所有设备需要时间。
然后进入 init ram disk 就已经 2 秒钟了。
找 USB 设备需要 从新 port reset。
mount 文件系统等等。
[ 0.156718] ACPI: All ACPI Tables successfully acquired
[ 0.183241] smpboot: CPU0: Intel(R) Xeon(R) CPU W3680 @ 3.
33GHz (f
am: 06, model: 2c, stepping: 02)
[ 0.284772] Performance Events: PEBS fmt1+, 16-deep LBR, Westmere events,
Int[ 0.299501] #2 #3 #4 #5 #6 #7 #8 #9 #10 #11
[ 0.432083] x86: Booted up 1 node, 12 CPUs
[ 0.704795] PCI: CLS 64 bytes, default 64
[ 0.704836] Unpacking initramfs...
[ 0.915132] Freeing initrd memory: 1
[ 0.963134] ata_piix 0000:00:1f.5: MAP [ P0 -- P1 -- ]
[ 1.114167] scsi2 : ata_piix
[ 1.114351] ehci-pci: EHCI PCI platform driver
[ 1.138083] usbserial: USB Serial support registered for generic
[ 1.144629] PM: Hibernation image not present or could not be loaded.
[ 1.418907] ata4: SATA link down (SStatus 4 SControl 300)
[ 1.722727] ata1.00: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[ 1.806177] ata1.01: configured for UDMA/133
[ 1.806452] scsi 0:0:0:0: Direct-Access ATA WDC
[ 1.880049] Freeing unused kernel memory: 1440K
[ 1.888155] systemd[1]: Running in initial RAM disk.
[ 1.986634] systemd-udevd[289]: starting version 208
[ 2.003826] pps_core: LinuxPPS API ver. 1 registered
【在 n*****t 的大作中提到】 : 不见得,可以 ramdisk,只编译确定有的 driver,全部 modprobe。 : 其实 2 秒没意义,确定要用的应该全放在 zimage 里,这样才最快最省
|
n******t 发帖数: 4406 | 169 这有什么奇怪的。我当年用linux 2.2kernel,一般在100K左右,
基本上web服务器,ftp,bbs,防火墙,都搞定了。
【在 s******u 的大作中提到】 : 感叹一下,900K的kernel不知道还剩下些什么东西 : busybox把所有的命令都删光估计可以到600k了 : 另外50MHz的spi也很变态 : : 70 : 300 : flash.
|
s******u 发帖数: 501 | 170 scheduler, memory management, process management, file system这些的代码都不
小啊,我随便写个简单地device module就有几十k了,总之能压倒几百K的都是牛逼
【在 n******t 的大作中提到】 : 这有什么奇怪的。我当年用linux 2.2kernel,一般在100K左右, : 基本上web服务器,ftp,bbs,防火墙,都搞定了。
|
|
|
s******u 发帖数: 501 | 171 扯了一大圈好像没人在回答楼主最早的问题了,呵呵
你的是基于什么开发板的么?如果是的话找个对应的device tree,还有那些device对
应的module什么的,编译一个kernel出来应该还不太麻烦。如果是完全自己设计的板子
那相对麻烦多了,不过要能自己设计开发板,搞定个kernel build应该不是问题吧
可以去看看yocto
https://www.yoctoproject.org/
【在 b***i 的大作中提到】 : 目的是嵌入式系统,比如ARM 600MHz,512M内存,SD card,USB,ethernet等都是固定 : 的硬件,比如像苹果手机那样。 : 那么,能做到启动Linux使用2秒钟以内吗?
|
S*A 发帖数: 7142 | 172 我说那个看 dmesg 的应该是相关的吧。把 time stamp 打开。
看看启动引导的时候时间都花在什么模块上了。
基本上, CPU 是很快的。慢的是外设。你要用的外设越多,
越容易慢。找到最慢的部分看看如何能简化。
【在 s******u 的大作中提到】 : 扯了一大圈好像没人在回答楼主最早的问题了,呵呵 : 你的是基于什么开发板的么?如果是的话找个对应的device tree,还有那些device对 : 应的module什么的,编译一个kernel出来应该还不太麻烦。如果是完全自己设计的板子 : 那相对麻烦多了,不过要能自己设计开发板,搞定个kernel build应该不是问题吧 : 可以去看看yocto : https://www.yoctoproject.org/
|
b***i 发帖数: 3043 | 173 一个方案是Zync 7000 双ARM的FPGA,自带所有需要的设备,包括SD controller。
另一个是Freescale的coldfire系列。
最近,pico 发布了只要300块(促销价)的开发版,八月31前,考虑需不需要买一个。
如果只给这个开发版开发Linux,是否可以把不需要的代码全部删掉?另外,SD
controller是不是比spi快?
【在 s******u 的大作中提到】 : 扯了一大圈好像没人在回答楼主最早的问题了,呵呵 : 你的是基于什么开发板的么?如果是的话找个对应的device tree,还有那些device对 : 应的module什么的,编译一个kernel出来应该还不太麻烦。如果是完全自己设计的板子 : 那相对麻烦多了,不过要能自己设计开发板,搞定个kernel build应该不是问题吧 : 可以去看看yocto : https://www.yoctoproject.org/
|
b*****e 发帖数: 1193 | 174 人楼主问的就是embedded linux , 剪裁以后能否2s启动,这当然是可以了。
有啥好争的?
zynq这个肯定没问题。
不过,我做的没有用linux,自己port的OS和driver,启动更快
另外可以考虑imx 6Q,我买了个板子$130,这个也没问题。而且freescale的支持和网上
社区的支持比较多
公司用jacinto 6的也不少,双核。Ti的社区也很完善。
coldfire,目前冷一些。
看你啥应用了。
用SD还是spi flash,看你什么应用了。速度上,都不是快速设备。SPIFI可以到50MB/s
, SD大概是50-200MHz,
一般是用zip image 放flash/SD,load到ram,展开。SD就做个外部硬盘用。
另外,SD升级firmware方便些。 |
x****u 发帖数: 44466 | 175 i2c的flash用在bootrom上,大师你在说什么啊。。。
【在 s******u 的大作中提到】 : 也有i2c接口的flash,但是那个的速度更慢。而且用在bootrom上似乎也没多大选择, : 支持的就那么几个简单的协议。进到bootloader之后就可以选择下一步到哪里去load更 : 进一步的image了,比方说tftp
|
S*A 发帖数: 7142 | 176
你可以先把不需要的模块 disable。 改 config。
还有就是好好理解确定你目前慢的时间是在什么模块上,
在干什么事。
SD controller 如果事 SOC 自己带的,用 SDIO 模式一般会比 SPI
快。这个要看 controller 提供什么样的外设借口。一般来说,你
不需要用 GPIO 来做 SPI 就会快很多。
【在 b***i 的大作中提到】 : 一个方案是Zync 7000 双ARM的FPGA,自带所有需要的设备,包括SD controller。 : 另一个是Freescale的coldfire系列。 : 最近,pico 发布了只要300块(促销价)的开发版,八月31前,考虑需不需要买一个。 : 如果只给这个开发版开发Linux,是否可以把不需要的代码全部删掉?另外,SD : controller是不是比spi快?
|
x****u 发帖数: 44466 | 177 我就知道这帖子能把民科都引过来。
外置EEPROM不管有多便宜,atmega328p也离不开内置bootrom,不然你boot不了连总线
都不支持。
【在 S*A 的大作中提到】 : sherrylu 说的对,我一开始没有注意你们讨论的是 ARM。 : 能够跑 Linux 的 ARM SOC 基本上都不自己带 flash。 : 反而是那些 8 位 MCU 带 flash。 Atmega328p 就是 32k : flash。 : Linux 嵌入接 flash 和 SPI 和 I2C 非常常见,你自己少见 : 多怪了。基本上所有可以 flash firmware 的 linux router, : openwrt/DDWRT 之类,flash 都是在 SOC 外部的。 : 你要需要我可以找两个版子来拍个照片给你。 : 原因很简单,能够跑 Linux 的 flash 空间比较大,把那么 : 大的 flash 写在 SOC 里面很贵。Atmemga328p 就比
|
x****u 发帖数: 44466 | 178 就说ARM吧,比如iPhone,也不是用什么串行设备连接的内存。
一般说bootrom时,指的是只读内存,而说flash时指的是外存,冯诺依曼架构对这两个
设备的要求截然不同。
【在 S*A 的大作中提到】 : sherrylu 说的对,我一开始没有注意你们讨论的是 ARM。 : 能够跑 Linux 的 ARM SOC 基本上都不自己带 flash。 : 反而是那些 8 位 MCU 带 flash。 Atmega328p 就是 32k : flash。 : Linux 嵌入接 flash 和 SPI 和 I2C 非常常见,你自己少见 : 多怪了。基本上所有可以 flash firmware 的 linux router, : openwrt/DDWRT 之类,flash 都是在 SOC 外部的。 : 你要需要我可以找两个版子来拍个照片给你。 : 原因很简单,能够跑 Linux 的 flash 空间比较大,把那么 : 大的 flash 写在 SOC 里面很贵。Atmemga328p 就比
|
S*A 发帖数: 7142 | 179 嵌入 Linux 用除了用 SPI, I2C rom 也是很常见的。
你没有概念就不要出来显了。
给个常见的 beagle board 你看看,EEPOM 那一段:
http://elinux.org/BeagleBoardPinMux
EEPROM used for this is AT24 EEPROM (AT24C01B). By three pins (A0 to A2) the
I2C address can be configured to I2C address 0x50. Via Beagle's expansion
header it is connected to OMAP3 I2C bus #2.
还有以前最常用的 WRT54 这一类路由器也是用 I2C 的 boot rom。
DDWRT 西红柿都是刷在 I2C boot rom 上的。
【在 x****u 的大作中提到】 : i2c的flash用在bootrom上,大师你在说什么啊。。。
|
x****u 发帖数: 44466 | 180 所以说你缺乏根本概念。
虽然存储设备差不多,但对于SOC来说内外存是不一样的。你现在说的话20多年前也有
人问过:内存坏了,可不可以直接用硬盘跑basic,不就是速度慢点么?
the
【在 S*A 的大作中提到】 : 嵌入 Linux 用除了用 SPI, I2C rom 也是很常见的。 : 你没有概念就不要出来显了。 : 给个常见的 beagle board 你看看,EEPOM 那一段: : http://elinux.org/BeagleBoardPinMux : EEPROM used for this is AT24 EEPROM (AT24C01B). By three pins (A0 to A2) the : I2C address can be configured to I2C address 0x50. Via Beagle's expansion : header it is connected to OMAP3 I2C bus #2. : 还有以前最常用的 WRT54 这一类路由器也是用 I2C 的 boot rom。 : DDWRT 西红柿都是刷在 I2C boot rom 上的。
|
|
|
S*A 发帖数: 7142 | 181 你是不知道现在很多嵌入 MCU 可以把 flash 影射到内存地址上面的吗?
BeagleBoard 就是 ARM Linux 啊。非常常见的了。
【在 x****u 的大作中提到】 : 就说ARM吧,比如iPhone,也不是用什么串行设备连接的内存。 : 一般说bootrom时,指的是只读内存,而说flash时指的是外存,冯诺依曼架构对这两个 : 设备的要求截然不同。
|
S*A 发帖数: 7142 | 182 你个流氓辩论法,高。
你看看 beagleBoard 这个 bootrom 是放在什么地方?
是通过什么总线来访问?是不是 I2c?
我就是举个你说的例子。
【在 x****u 的大作中提到】 : 所以说你缺乏根本概念。 : 虽然存储设备差不多,但对于SOC来说内外存是不一样的。你现在说的话20多年前也有 : 人问过:内存坏了,可不可以直接用硬盘跑basic,不就是速度慢点么? : : the
|
x****u 发帖数: 44466 | 183 你要是玩过老的bios,就知道ShadowROM其实是一个CMOS选项,是启动后软件实现的。
【在 S*A 的大作中提到】 : 你是不知道现在很多嵌入 MCU 可以把 flash 影射到内存地址上面的吗? : BeagleBoard 就是 ARM Linux 啊。非常常见的了。
|
S*A 发帖数: 7142 | 184 你就不要丢人啦,
启动部分的 ROM 不能靠纯软件实现的。你要说 PC,ROM 是软件
实现的,RESET 以后启动的地址内容是谁加载进来的?
有个 bootrom 的 bootrom?
一定要有硬件支持的。
你不是说 Linux 没有人用 I2C bootrom 吗,实例都给你了。
【在 x****u 的大作中提到】 : 你要是玩过老的bios,就知道ShadowROM其实是一个CMOS选项,是启动后软件实现的。
|
x****u 发帖数: 44466 | 185 现在小孩不上课还理直气壮了。。。
把bootrom放SD卡里和这个有区别么?你有没有想想从加电到启动这段时间发生了什么
?CPU复位必须跳转特定rom地址,这才是真正意义上的boot rom,你说的这个只是外存
而已。
【在 S*A 的大作中提到】 : 你个流氓辩论法,高。 : 你看看 beagleBoard 这个 bootrom 是放在什么地方? : 是通过什么总线来访问?是不是 I2c? : 我就是举个你说的例子。
|
x****u 发帖数: 44466 | 186 尼玛现在都流行在手机维修部学计算机么?
复位时把寄存器状态清零,其中指令寄存器会被赋予一个特定高端地址,然后引发CPU
对地址线的操作。
你能分清地址线和I2C么?20年前要用硬盘模拟内存的也是你吧。
【在 S*A 的大作中提到】 : 你就不要丢人啦, : 启动部分的 ROM 不能靠纯软件实现的。你要说 PC,ROM 是软件 : 实现的,RESET 以后启动的地址内容是谁加载进来的? : 有个 bootrom 的 bootrom? : 一定要有硬件支持的。 : 你不是说 Linux 没有人用 I2C bootrom 吗,实例都给你了。
|
S*A 发帖数: 7142 | 187 傻冒了吧, 这个特定地址,在 beagle board 就是 I2C rom。
CPU 直接吧这个特定地址的访问翻译成 I2C rom access。
PC 这个 rom 也有自己的地址和加载方式。
beagle board 没有 SD card 也可以boot。 但是没有
I2C bootrom 就不可能 boot 其他的东西,包括 SD card。
区别就是,这个 CPU 的 Boot sequence 是手册上写好
Reset 去如何访问 I2C rom 的。
你如何绕也是绕不过的。
【在 x****u 的大作中提到】 : 现在小孩不上课还理直气壮了。。。 : 把bootrom放SD卡里和这个有区别么?你有没有想想从加电到启动这段时间发生了什么 : ?CPU复位必须跳转特定rom地址,这才是真正意义上的boot rom,你说的这个只是外存 : 而已。
|
x****u 发帖数: 44466 | 188 这就是对体系结构无知才有的想法。
"CPU翻译地址访问"...你知不知道CPU是高速设备,不考虑cache只能访问地址总线,这
尼玛里面的设备和步骤多了去了,一个I2C是转了N层才挂上的。
直接接不是行为艺术是什么。
【在 S*A 的大作中提到】 : 傻冒了吧, 这个特定地址,在 beagle board 就是 I2C rom。 : CPU 直接吧这个特定地址的访问翻译成 I2C rom access。 : PC 这个 rom 也有自己的地址和加载方式。 : beagle board 没有 SD card 也可以boot。 但是没有 : I2C bootrom 就不可能 boot 其他的东西,包括 SD card。 : 区别就是,这个 CPU 的 Boot sequence 是手册上写好 : Reset 去如何访问 I2C rom 的。 : 你如何绕也是绕不过的。
|
S*A 发帖数: 7142 | 189 是你自己不能区分 CPU 内部地址和外部地址。
你说的 CPU 对地址线的操作,就是内部地址,
经过 paging 以后翻译到物理地址。
物理地址最后在芯片外部是要访问外部地址。
外部地址就是芯片借口,包括 EEPROM 和 RAM
这些。这个外部地址可以是 I2C, 也可以是ram bus。
也可以是 SPI。要看这个 CPU 外设支持什么。
你不如就 beagleboard 这个例子展开说一下
这个启动过程是如何用软件加载 I2C loading
code 的吧,如果 I2C 仅仅是硬盘外设备。
我们知道,这个 beagleboard rom 就是在 I2C
里面。ARM 里面就没有 EEPROM.
CPU
【在 x****u 的大作中提到】 : 尼玛现在都流行在手机维修部学计算机么? : 复位时把寄存器状态清零,其中指令寄存器会被赋予一个特定高端地址,然后引发CPU : 对地址线的操作。 : 你能分清地址线和I2C么?20年前要用硬盘模拟内存的也是你吧。
|
S*A 发帖数: 7142 | 190 你无论如何绕,绕不过去 beagleboard 的 bootrom 就是 I2C 里。
http://elinux.org/BeagleBoardPinMux
没有其他 ARM 上的 flash。
【在 x****u 的大作中提到】 : 这就是对体系结构无知才有的想法。 : "CPU翻译地址访问"...你知不知道CPU是高速设备,不考虑cache只能访问地址总线,这 : 尼玛里面的设备和步骤多了去了,一个I2C是转了N层才挂上的。 : 直接接不是行为艺术是什么。
|
|
|
x****u 发帖数: 44466 | 191 我倒,你藏拙吧。
这点事情和MMU以及paging毛关系也没有,这两个是纯软件层概念,x86都是启动后软件
开关。
【在 S*A 的大作中提到】 : 是你自己不能区分 CPU 内部地址和外部地址。 : 你说的 CPU 对地址线的操作,就是内部地址, : 经过 paging 以后翻译到物理地址。 : 物理地址最后在芯片外部是要访问外部地址。 : 外部地址就是芯片借口,包括 EEPROM 和 RAM : 这些。这个外部地址可以是 I2C, 也可以是ram bus。 : 也可以是 SPI。要看这个 CPU 外设支持什么。 : 你不如就 beagleboard 这个例子展开说一下 : 这个启动过程是如何用软件加载 I2C loading : code 的吧,如果 I2C 仅仅是硬盘外设备。
|
x****u 发帖数: 44466 | 192 你们手机班分不清bootrom和bootimage。。。
【在 S*A 的大作中提到】 : 你无论如何绕,绕不过去 beagleboard 的 bootrom 就是 I2C 里。 : http://elinux.org/BeagleBoardPinMux : 没有其他 ARM 上的 flash。
|
S*A 发帖数: 7142 | 193 我觉得龙猫最大的本事就是可以指着一头鹿,
然后和大家辩论这是一只马。最无耻也是
这样的辩论。
beagleboard 的 bootrom 就是放 I2C 里面。
你扯上 手机班, bootimage 又如何呢?
改变不了这个 ARM 就是从 I2C EEPROM 里面
boot 起来的。这个是事实。你说的那些没有
可以自圆其说的。 |
x****u 发帖数: 44466 | 194 ARM真不是从I2C总线启动起来的,处理器手册都在网上放着。。。您老最大问题是只上
过速成班,而计算机界名词又非常混乱,所以就错乱了。
打个比方,你把linux装在U盘里启动,然后就说奔腾CPU是直接从USB Flash memory启
动的,所以体系结构教材都胡扯。
【在 S*A 的大作中提到】 : 我觉得龙猫最大的本事就是可以指着一头鹿, : 然后和大家辩论这是一只马。最无耻也是 : 这样的辩论。 : beagleboard 的 bootrom 就是放 I2C 里面。 : 你扯上 手机班, bootimage 又如何呢? : 改变不了这个 ARM 就是从 I2C EEPROM 里面 : boot 起来的。这个是事实。你说的那些没有 : 可以自圆其说的。
|
S*A 发帖数: 7142 | 195 那你来展开说说,这个 beagleboard 的启动过程是如何的。
我们先不扯 PC, 你就说这个 beagleboard 的 ARM CPU 是如何
启动,第一个地址访问的内容是谁提供的,怎么来的。最后谁
来加载 I2C rom?
【在 x****u 的大作中提到】 : ARM真不是从I2C总线启动起来的,处理器手册都在网上放着。。。您老最大问题是只上 : 过速成班,而计算机界名词又非常混乱,所以就错乱了。 : 打个比方,你把linux装在U盘里启动,然后就说奔腾CPU是直接从USB Flash memory启 : 动的,所以体系结构教材都胡扯。
|
x****u 发帖数: 44466 | 196 第一个地址访问的是ROM,然后ROM引导程序从外存下载更多数据到内存,可以是网络或
者总线设备。
ROM不见得是内置,但SOC基本都有内置ROM,一个重要原因是加密。比方说你玩ddwrt吧
,为什么很多原厂的router的ROM解不开包,就是因为密钥放在芯片内部,然后几个熔
丝位烧死,家庭作坊是dump不出来的。
【在 S*A 的大作中提到】 : 那你来展开说说,这个 beagleboard 的启动过程是如何的。 : 我们先不扯 PC, 你就说这个 beagleboard 的 ARM CPU 是如何 : 启动,第一个地址访问的内容是谁提供的,怎么来的。最后谁 : 来加载 I2C rom?
|
S*A 发帖数: 7142 | 197 所以说你指鹿为马能力真不是盖的。
CPU 手册在这里,我们一步一步来看。
http://www.ti.com/lit/ds/symlink/am3715.pdf
这个 CPU 是不是没有 SOC 内置 EEPROM?如果有请指出来
手册哪一章,哪一页。
然后 bare 的 bagle board 是不是没有除了 I2C EEPROM 以外的
形式的 ROM?
这些基本 fact 可不可以确定?还是要再辩论一番?
【在 x****u 的大作中提到】 : ARM真不是从I2C总线启动起来的,处理器手册都在网上放着。。。您老最大问题是只上 : 过速成班,而计算机界名词又非常混乱,所以就错乱了。 : 打个比方,你把linux装在U盘里启动,然后就说奔腾CPU是直接从USB Flash memory启 : 动的,所以体系结构教材都胡扯。
|
x****u 发帖数: 44466 | 198 Ctrl-F,"ROM",第一个出来的是什么东西?
【在 S*A 的大作中提到】 : 所以说你指鹿为马能力真不是盖的。 : CPU 手册在这里,我们一步一步来看。 : http://www.ti.com/lit/ds/symlink/am3715.pdf : 这个 CPU 是不是没有 SOC 内置 EEPROM?如果有请指出来 : 手册哪一章,哪一页。 : 然后 bare 的 bagle board 是不是没有除了 I2C EEPROM 以外的 : 形式的 ROM? : 这些基本 fact 可不可以确定?还是要再辩论一番?
|
S*A 发帖数: 7142 | 199
http://www.ti.com/lit/ds/symlink/am3715.pdf
手册再这里。且慢,你说的 ROM 是 SOC 内部还是外部。
如果是内部在手册什么地方提到?
你说的是 ATMega 这种 8 位单片机。比较弱的 CPU。
这个 ARM 芯片没有。
【在 x****u 的大作中提到】 : 第一个地址访问的是ROM,然后ROM引导程序从外存下载更多数据到内存,可以是网络或 : 者总线设备。 : ROM不见得是内置,但SOC基本都有内置ROM,一个重要原因是加密。比方说你玩ddwrt吧 : ,为什么很多原厂的router的ROM解不开包,就是因为密钥放在芯片内部,然后几个熔 : 丝位烧死,家庭作坊是dump不出来的。
|
x****u 发帖数: 44466 | 200 第一个rom关键字啊亲。。。
【在 S*A 的大作中提到】 : : http://www.ti.com/lit/ds/symlink/am3715.pdf : 手册再这里。且慢,你说的 ROM 是 SOC 内部还是外部。 : 如果是内部在手册什么地方提到? : 你说的是 ATMega 这种 8 位单片机。比较弱的 CPU。 : 这个 ARM 芯片没有。
|
|
|
s******u 发帖数: 501 | 201 没错,arm芯片是有内置的rom,这个rom叫bootrom,大小一般在32k左右,内容大多是
固化的。cpu加电之后第一个读的地址确实就是这里。bootrom完成最基本的硬件初始化
,包括cpu,clock,interrupt和简单的总线比方说uart,spi,i2c。根据硬件跳线的
设置bootrom接下来会去外部的flash找bootloader并加载到内存,这是系统的第一步
boot
首先,虽然并不严格,但是bootrom是算在硬件的部分的,因为对大部分soc来说
bootrom是固化的,开发者在这一步几乎做不了任何事情。对于开发者来说,真正的
boot,也就是系统的软件部分,是从bootloader开始的。而上面很多人都说了,arm的
soc几乎是没有内置可以用来放bootloader的flash的。其次,你看我之前的帖子,跟你
说过bootrom就只有这么大,能做的就是初始化最基本的能与外设通讯的手段,常用的
就是几个串行的协议。
bootloader可以初始化更多的硬件设备,并且进一步加载os的image,比方说linux的
kernel和fs image。os最后是由bootloader加载的,不是bootrom加载的
这么说你理解了?
【在 x****u 的大作中提到】 : 第一个rom关键字啊亲。。。
|
S*A 发帖数: 7142 | 202 http://e2e.ti.com/support/omap/f/849/t/108130.aspx
那个是系统的 ROM, 不可以被用户 program 的。
所以我说 ARM 上面没有其他的 EEPROM 也是成立的。
但是我承认这个举这个例子比较不贴切,我看看能不
能给你找个好点的例子。
【在 x****u 的大作中提到】 : 第一个rom关键字啊亲。。。
|
b*****e 发帖数: 1193 | 203 这个估计你搞错了。
beagleboard的i2c eeprom AT24C01是用来存Sw/HW id,ver, 一共才128 bytes,太小
了。这个板子用am335x,肯定不是用i2c rom boot。
我正好在用AM335x这个片子开发,boot要么从data bus的Nor/Nand,要么SPI flash,
要么emmc/SD,beagleboard用SD boot的可能更大些,我自己的产品就用SD boot。
the
【在 S*A 的大作中提到】 : 嵌入 Linux 用除了用 SPI, I2C rom 也是很常见的。 : 你没有概念就不要出来显了。 : 给个常见的 beagle board 你看看,EEPOM 那一段: : http://elinux.org/BeagleBoardPinMux : EEPROM used for this is AT24 EEPROM (AT24C01B). By three pins (A0 to A2) the : I2C address can be configured to I2C address 0x50. Via Beagle's expansion : header it is connected to OMAP3 I2C bus #2. : 还有以前最常用的 WRT54 这一类路由器也是用 I2C 的 boot rom。 : DDWRT 西红柿都是刷在 I2C boot rom 上的。
|
s******u 发帖数: 501 | 204 我想说的是,你就是揪了一些关键字和从你自己家pc上学来的一点知识,然后为了之前
自己吹的一些牛皮就在那边拍这个拍那个。但是真正的对于embedded system和soc你除
了现学现卖的从网上找来的一些资料之外,你实际懂多少?连beagle board都没听说过
,还有你有哪怕是编译过bootloader么?我甚至怀疑你之前压根就没听说过这个名词,
更不要说soc的启动序列了。也许你用过arduino,但是arduino不是embedded linux,
我怀疑你也根本没去关心过arduino是怎么boot的
【在 x****u 的大作中提到】 : 第一个rom关键字啊亲。。。
|
S*A 发帖数: 7142 | 205 对这个我没有很仔细看,多谢指正。
【在 b*****e 的大作中提到】 : 这个估计你搞错了。 : beagleboard的i2c eeprom AT24C01是用来存Sw/HW id,ver, 一共才128 bytes,太小 : 了。这个板子用am335x,肯定不是用i2c rom boot。 : 我正好在用AM335x这个片子开发,boot要么从data bus的Nor/Nand,要么SPI flash, : 要么emmc/SD,beagleboard用SD boot的可能更大些,我自己的产品就用SD boot。 : : the
|
h**i 发帖数: 712 | 206 我觉得你还得别嘴硬了,nor flash XIP知道不? 嵌入式的硬件环境跟五年前大不一样了
,Linux kernel也很不一样了,你该更新知识了
【在 x****u 的大作中提到】 : 所以说你缺乏根本概念。 : 虽然存储设备差不多,但对于SOC来说内外存是不一样的。你现在说的话20多年前也有 : 人问过:内存坏了,可不可以直接用硬盘跑basic,不就是速度慢点么? : : the
|
h**i 发帖数: 712 | 207 你先学习一下powerpc, arm的boot config设置,压根没概念啊你
CPU
【在 x****u 的大作中提到】 : 尼玛现在都流行在手机维修部学计算机么? : 复位时把寄存器状态清零,其中指令寄存器会被赋予一个特定高端地址,然后引发CPU : 对地址线的操作。 : 你能分清地址线和I2C么?20年前要用硬盘模拟内存的也是你吧。
|
x****u 发帖数: 44466 | 208 大姐你还是找本书看看吧,这些东西30多年没变化了。。。
谁告诉你ARM就靠几个简单串行协议和设备通信的?移动设备总线是很复杂的,中断管
理,DMA资源分配什么的都不是一句两句说得清楚的。用i2c连接外存不仅仅是速度慢,
现代os的中断怎么搞,DMA怎么搞,你以为是arduino放音乐么?
【在 s******u 的大作中提到】 : 没错,arm芯片是有内置的rom,这个rom叫bootrom,大小一般在32k左右,内容大多是 : 固化的。cpu加电之后第一个读的地址确实就是这里。bootrom完成最基本的硬件初始化 : ,包括cpu,clock,interrupt和简单的总线比方说uart,spi,i2c。根据硬件跳线的 : 设置bootrom接下来会去外部的flash找bootloader并加载到内存,这是系统的第一步 : boot : 首先,虽然并不严格,但是bootrom是算在硬件的部分的,因为对大部分soc来说 : bootrom是固化的,开发者在这一步几乎做不了任何事情。对于开发者来说,真正的 : boot,也就是系统的软件部分,是从bootloader开始的。而上面很多人都说了,arm的 : soc几乎是没有内置可以用来放bootloader的flash的。其次,你看我之前的帖子,跟你 : 说过bootrom就只有这么大,能做的就是初始化最基本的能与外设通讯的手段,常用的
|
x****u 发帖数: 44466 | 209 你根本没看懂。
内置rom当然不可以用EEPROM的工具改写,但修改内容一点问题没有,用专用工具即可
,开不开放,锁不锁死也可以用熔丝位限制。
不然加密,验证都没法做,甚至三哥程序员多打一个分号你芯片就要销毁。。。
【在 S*A 的大作中提到】 : http://e2e.ti.com/support/omap/f/849/t/108130.aspx : 那个是系统的 ROM, 不可以被用户 program 的。 : 所以我说 ARM 上面没有其他的 EEPROM 也是成立的。 : 但是我承认这个举这个例子比较不贴切,我看看能不 : 能给你找个好点的例子。
|
x****u 发帖数: 44466 | 210 你彻底错乱了。
8位机和Linux有毛关系,我是建议你好好学学基础别被名词搞傻了。
【在 s******u 的大作中提到】 : 我想说的是,你就是揪了一些关键字和从你自己家pc上学来的一点知识,然后为了之前 : 自己吹的一些牛皮就在那边拍这个拍那个。但是真正的对于embedded system和soc你除 : 了现学现卖的从网上找来的一些资料之外,你实际懂多少?连beagle board都没听说过 : ,还有你有哪怕是编译过bootloader么?我甚至怀疑你之前压根就没听说过这个名词, : 更不要说soc的启动序列了。也许你用过arduino,但是arduino不是embedded linux, : 我怀疑你也根本没去关心过arduino是怎么boot的
|
|
|
x****u 发帖数: 44466 | 211 我给你出道题,8086如何直接利用硬盘代替物理ram?
【在 h**i 的大作中提到】 : 我觉得你还得别嘴硬了,nor flash XIP知道不? 嵌入式的硬件环境跟五年前大不一样了 : ,Linux kernel也很不一样了,你该更新知识了
|
x****u 发帖数: 44466 | 212 你不是没概念,你是概念之间对不上,告诉你几个新名词就以为不是冯诺依曼机了。。。
【在 h**i 的大作中提到】 : 你先学习一下powerpc, arm的boot config设置,压根没概念啊你 : : CPU
|
b*****e 发帖数: 1193 | 213 内置的boot rom是silicon定制的部分,ARM芯片不一定都有。
比如S3C2440就有这个boot rom,然而老的ARM7TDMI,比如TMS470,就没有这个boot
room,startup直接从0地址开始。
【在 s******u 的大作中提到】 : 没错,arm芯片是有内置的rom,这个rom叫bootrom,大小一般在32k左右,内容大多是 : 固化的。cpu加电之后第一个读的地址确实就是这里。bootrom完成最基本的硬件初始化 : ,包括cpu,clock,interrupt和简单的总线比方说uart,spi,i2c。根据硬件跳线的 : 设置bootrom接下来会去外部的flash找bootloader并加载到内存,这是系统的第一步 : boot : 首先,虽然并不严格,但是bootrom是算在硬件的部分的,因为对大部分soc来说 : bootrom是固化的,开发者在这一步几乎做不了任何事情。对于开发者来说,真正的 : boot,也就是系统的软件部分,是从bootloader开始的。而上面很多人都说了,arm的 : soc几乎是没有内置可以用来放bootloader的flash的。其次,你看我之前的帖子,跟你 : 说过bootrom就只有这么大,能做的就是初始化最基本的能与外设通讯的手段,常用的
|
S*A 发帖数: 7142 | 214 这个有好一点的例子是可以完全不用 Internal ROM 的。
http://www.openhacks.com/uploadsproductos/ar9331_datasheet.pdf
page 307.
When the digital reset goes
from low to high, the CPU begins fetching
instructions from the internal ROM or the
external SPI in order to boot the system。 |
x****u 发帖数: 44466 | 215 没有internal ROM也必须有外置连接到内存总线上的ROM,微机原理就这么点东西70年
也不变。
你的I2C和UART大部分情况下是上层总线上挂的一个低速设备,这种设备只有初始化以
后才能驱动。
【在 S*A 的大作中提到】 : 这个有好一点的例子是可以完全不用 Internal ROM 的。 : http://www.openhacks.com/uploadsproductos/ar9331_datasheet.pdf : page 307. : When the digital reset goes : from low to high, the CPU begins fetching : instructions from the internal ROM or the : external SPI in order to boot the system。
|
x****u 发帖数: 44466 | 216 内存等高速设备一外置,板子的设计和加工就麻烦了,不是面包板飞线搞得定了。
【在 b*****e 的大作中提到】 : 内置的boot rom是silicon定制的部分,ARM芯片不一定都有。 : 比如S3C2440就有这个boot rom,然而老的ARM7TDMI,比如TMS470,就没有这个boot : room,startup直接从0地址开始。
|
h**i 发帖数: 712 | 217 所以说你的知识还是x86体系,现在的嵌入式怎么玩eMMC你知道吗?
回答楼主的问题,我直接定制过powerpc的kernel启动用了5秒,还可以更快,不过如果你
可以忍受手机的启动时间,没有理由在乎这个.
【在 x****u 的大作中提到】 : 我给你出道题,8086如何直接利用硬盘代替物理ram?
|
x****u 发帖数: 44466 | 218 你这个又会错意了。
原文说的是PC可以用内置rom或者是映射到地址总线上的设备启动。
Upon reset, the
CPU puts out an address of 0xBFC00000 which
is mapped to the flash address space or internal
ROM code, using an external pull up/down
register to choose if the AR9331 will boot from
the Flash or internal ROM.
【在 S*A 的大作中提到】 : 这个有好一点的例子是可以完全不用 Internal ROM 的。 : http://www.openhacks.com/uploadsproductos/ar9331_datasheet.pdf : page 307. : When the digital reset goes : from low to high, the CPU begins fetching : instructions from the internal ROM or the : external SPI in order to boot the system。
|
x****u 发帖数: 44466 | 219 我定制过的PC2秒就启动了。。。这不是嵌入式。
【在 h**i 的大作中提到】 : 所以说你的知识还是x86体系,现在的嵌入式怎么玩eMMC你知道吗? : 回答楼主的问题,我直接定制过powerpc的kernel启动用了5秒,还可以更快,不过如果你 : 可以忍受手机的启动时间,没有理由在乎这个.
|
b*****e 发帖数: 1193 | 220 很多ARM MCU的internal flash和ram就足够应用了,比如1M flash,256KB RAM。
但是一涉及linux,就不得不上DDR ram。128M都常常紧张。
所以很多产品级的应用就是一个简单的RTOS,挂上file system,GUI,比linux开发起来
快的的多。
【在 x****u 的大作中提到】 : 内存等高速设备一外置,板子的设计和加工就麻烦了,不是面包板飞线搞得定了。
|
|
|
S*A 发帖数: 7142 | 221 这个就错啦,AR9331 我就比较熟悉了。用 SPI EEPROM,
不是内存。
SPI EEPROM 在你看来也是低速设备?不用内存总线。
【在 x****u 的大作中提到】 : 没有internal ROM也必须有外置连接到内存总线上的ROM,微机原理就这么点东西70年 : 也不变。 : 你的I2C和UART大部分情况下是上层总线上挂的一个低速设备,这种设备只有初始化以 : 后才能驱动。
|
S*A 发帖数: 7142 | 222 对啊,AR9331 可以不用内置的 ROM 启动,
用 SPI ROM 启动,那个是直接映射到 CPU
内部地址的。
我引用的就是原文,那里有会错意?
你引用的也是说这个啊。
【在 x****u 的大作中提到】 : 你这个又会错意了。 : 原文说的是PC可以用内置rom或者是映射到地址总线上的设备启动。 : Upon reset, the : CPU puts out an address of 0xBFC00000 which : is mapped to the flash address space or internal : ROM code, using an external pull up/down : register to choose if the AR9331 will boot from : the Flash or internal ROM.
|
S*A 发帖数: 7142 | 223 Ar9331 内存总线是 ddr/ddr2
EEPRom 就是 SPI,很慢的那种。
这个芯片的路由器被分析很彻底了。 |
S*A 发帖数: 7142 | 224 有网络的很多都 Linux 了。
【在 b*****e 的大作中提到】 : 很多ARM MCU的internal flash和ram就足够应用了,比如1M flash,256KB RAM。 : 但是一涉及linux,就不得不上DDR ram。128M都常常紧张。 : 所以很多产品级的应用就是一个简单的RTOS,挂上file system,GUI,比linux开发起来 : 快的的多。
|
x****u 发帖数: 44466 | 225 两回事,你文档里面写了:
Memory
Controller
The AR9331 has two external memory interfaces. They consist of a 16-bit DDR1
/ DDR2 or
SDRAM memory interface supporting up to 400 Mbps/pin, and an SPI NOR type
flash. The
AR9331 also contains internal RAM.
这就是我说的把硬盘接到8086的意思。
【在 S*A 的大作中提到】 : 这个就错啦,AR9331 我就比较熟悉了。用 SPI EEPROM, : 不是内存。 : SPI EEPROM 在你看来也是低速设备?不用内存总线。
|
x****u 发帖数: 44466 | 226 SPI是不能和CPU映射的,必须加中间转换控制器。
我倒是觉得内置rom用一段小程序shadow了SPI ROM的可能性更大点。
【在 S*A 的大作中提到】 : 对啊,AR9331 可以不用内置的 ROM 启动, : 用 SPI ROM 启动,那个是直接映射到 CPU : 内部地址的。 : 我引用的就是原文,那里有会错意? : 你引用的也是说这个啊。
|
n*****t 发帖数: 22014 | 227 小菊你真是吃饱撑的,楼上 N 人做 ARM 经验比你丰富多,你还在拿叉86来回硬拗,面
子真的那么重要?
【在 x****u 的大作中提到】 : SPI是不能和CPU映射的,必须加中间转换控制器。 : 我倒是觉得内置rom用一段小程序shadow了SPI ROM的可能性更大点。
|
S*A 发帖数: 7142 | 228
你的依据是什么,我们能用 datasheet 来说明吗?
你说得控制转换器就是 APB bridge。 这个是 AR9344
自带的。这个也很清楚说明这个 mapping 是硬件
实现的。
2.5 APB Bridge
One 16 MByte window of the AHB address
space is devoted to an APB device mapper. The
APB space contains the register address spaces
of most of the interfaces, including serial flash,
^^^^^^^^^^^^^^^^
GPIO, and UART. This space also provides
access to the watchdog timer and four general
purpose timers.
这个你自己 quote 过,你自己看懂了吗? 用外部 pin 来决定
是使用内部 RO买还是直接从外部 Flash 启动,如果是
外部flash启动,地址 0xBFC00000 映射到 flash 的地址空间。
原文用到 “mapped to flash address space", 还给出了地址,
是0xBFC00000。
Upon reset, the
CPU puts out an address of 0xBFC00000 which
^^^^^^^^^^^^^^
is mapped to the flash address space or internal
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ROM code, using an external pull up/down
register to choose if the AR9331 will boot from
the Flash or internal ROM.
然后 2.1 (23 页),给出了 AR9344 地址空间区间图:
怕你找不到,我给你贴出来了:
最后 2.7 讲了如何访问这个 flash address mapping。
.7 Serial Flash (SPI)
The single SPI chip select is dedicated to an
external flash to boot the chip. Two
configurable chip selects are available to bit-
bang using GPIOs that configure external
components. As an AHB slave, the SPI
controller only supports word transactions.
Because serial flash supports cached reads (but
not cached writes) functionality, the CPU must
perform uncached write, but a read can be
accelerated by performing cached reads. By
default, the REMAP_DISABLE bit is zero
which only 4 MBytes are accessible. By setting
this bit to 1, up to 16 MBytes of flash space can
be accessed.
【在 x****u 的大作中提到】 : SPI是不能和CPU映射的,必须加中间转换控制器。 : 我倒是觉得内置rom用一段小程序shadow了SPI ROM的可能性更大点。
|
S*A 发帖数: 7142 | 229 看我上文的图。
这个和 8086 硬盘是两回事。 8086 硬盘没有地址空间 mapping。
有读盘服务。可以 DMA, 但是不可以吧整个硬盘内容 map 到
CPU 数据地址里。你每次读要对磁盘控制器操作。
AR9331 可以吧 flash 直接 map 到地址空间。可以直接读/写取这个
地址空间,内容就通过 SPI 写到 flash 里。这个 mapping 是硬件实
的。
DDR1
【在 x****u 的大作中提到】 : 两回事,你文档里面写了: : Memory : Controller : The AR9331 has two external memory interfaces. They consist of a 16-bit DDR1 : / DDR2 or : SDRAM memory interface supporting up to 400 Mbps/pin, and an SPI NOR type : flash. The : AR9331 also contains internal RAM. : 这就是我说的把硬盘接到8086的意思。
|
x****u 发帖数: 44466 | 230 你是能说出“ARM经验”这几个词就暴露了,这和前几年国内流行的熟读linux内核都是
一样专门唬外行的。
【在 n*****t 的大作中提到】 : 小菊你真是吃饱撑的,楼上 N 人做 ARM 经验比你丰富多,你还在拿叉86来回硬拗,面 : 子真的那么重要?
|
|
|
x****u 发帖数: 44466 | 231 大错特错,硬盘只要做个简单电路就可以map到地址空间。
但最大障碍是速度慢,一般没人这么干。这就是我说的用慢速总线直连地址线是行为艺
术的意思。
【在 S*A 的大作中提到】 : 看我上文的图。 : 这个和 8086 硬盘是两回事。 8086 硬盘没有地址空间 mapping。 : 有读盘服务。可以 DMA, 但是不可以吧整个硬盘内容 map 到 : CPU 数据地址里。你每次读要对磁盘控制器操作。 : AR9331 可以吧 flash 直接 map 到地址空间。可以直接读/写取这个 : 地址空间,内容就通过 SPI 写到 flash 里。这个 mapping 是硬件实 : 的。 : : DDR1
|
n*****t 发帖数: 22014 | 232 擦,哥好歹也写过 6-7 年 kernel,虽说很久不碰已经忘光了
【在 x****u 的大作中提到】 : 你是能说出“ARM经验”这几个词就暴露了,这和前几年国内流行的熟读linux内核都是 : 一样专门唬外行的。
|
x****u 发帖数: 44466 | 233 在简历上前半句可以用来洗粉。。。
都是
【在 n*****t 的大作中提到】 : 擦,哥好歹也写过 6-7 年 kernel,虽说很久不碰已经忘光了
|
x****u 发帖数: 44466 | 234 首先你说的apb bridge就是我说的转换电路之一。
另外以下这句话是错的:
用外部 pin 来决定
是使用内部 RO买还是直接从外部 Flash 启动,如果是
外部flash启动,地址 0xBFC00000 映射到 flash 的地址空间。
原文用到 “mapped to flash address space", 还给出了地址,
是0xBFC00000。
根据mips手册,0xbfc00000是复位时的虚拟地址,其具体位置取决于kseg1映射。也就
是说mips启动时从哪里读第一条指令,要先查kseg1表翻译这个地址。具体到你这个硬
件,有可能它准备了两套预设值在rom里面,用pin选择。
【在 S*A 的大作中提到】 : 看我上文的图。 : 这个和 8086 硬盘是两回事。 8086 硬盘没有地址空间 mapping。 : 有读盘服务。可以 DMA, 但是不可以吧整个硬盘内容 map 到 : CPU 数据地址里。你每次读要对磁盘控制器操作。 : AR9331 可以吧 flash 直接 map 到地址空间。可以直接读/写取这个 : 地址空间,内容就通过 SPI 写到 flash 里。这个 mapping 是硬件实 : 的。 : : DDR1
|
b***i 发帖数: 3043 | 235 看来需要bootrom, flash
zed board的Zync 7010是用flash qspi做bootrom, 然后启动Linux 才200美元。
之所以需要zync,或者coldfire是因为需要自定义一些串口设备,比如可以调制解调的
,可以发送和接收不同速度的等
usb storage , sd card (SD controller), usb uart silicon lab cp2102, 10/100/
1000 ethernet, 这些确定的外设到底可以把启动时间降低到多少?需要ftp, http( 不
重要),tcp/ip, 这样的设备不用linux,用其他的比如uCOS如何?
启动后最先需要做的事情是很简单的串口通信。同时,希望可以继续扫描其他设备,比
如网卡,usb 存储器等。这样是否可以提速?
【在 S*A 的大作中提到】 : 你就不要丢人啦, : 启动部分的 ROM 不能靠纯软件实现的。你要说 PC,ROM 是软件 : 实现的,RESET 以后启动的地址内容是谁加载进来的? : 有个 bootrom 的 bootrom? : 一定要有硬件支持的。 : 你不是说 Linux 没有人用 I2C bootrom 吗,实例都给你了。
|
S*A 发帖数: 7142 | 236 靠什么都是随你说得啦。
前面说SPI 都太慢不可能接直接访问。后面就硬盘都太简单可以直接硬件
memory map。你说人家不可以直接访问 flash 启动,就算 data sheet
里说了可以都不算得,人家就绝对不可能用硬件实现选择电路,就你自
己说可能还是要一定访问 ROM 才算。
【在 x****u 的大作中提到】 : 首先你说的apb bridge就是我说的转换电路之一。 : 另外以下这句话是错的: : 用外部 pin 来决定 : 是使用内部 RO买还是直接从外部 Flash 启动,如果是 : 外部flash启动,地址 0xBFC00000 映射到 flash 的地址空间。 : 原文用到 “mapped to flash address space", 还给出了地址, : 是0xBFC00000。 : 根据mips手册,0xbfc00000是复位时的虚拟地址,其具体位置取决于kseg1映射。也就 : 是说mips启动时从哪里读第一条指令,要先查kseg1表翻译这个地址。具体到你这个硬 : 件,有可能它准备了两套预设值在rom里面,用pin选择。
|
x****u 发帖数: 44466 | 237 我就详细解释一下你到底错在哪里。
这个datasheet说的spi,和一般说的低速设备常用的i2c,spi不同,是专门为Serial
flash做的接口。SPI不是成文协议,只要有3根或者4根线类似定义的串行通信都可以这
么叫。
恰好有人做了基于mips和serial flash的Arduino方案,其中spi用的不是内存控制器的
,而是用gpio模拟。
所以教科书是没错的,专业设计不能让慢速总线拖后腿,给老师代个好吧。
【在 S*A 的大作中提到】 : 靠什么都是随你说得啦。 : 前面说SPI 都太慢不可能接直接访问。后面就硬盘都太简单可以直接硬件 : memory map。你说人家不可以直接访问 flash 启动,就算 data sheet : 里说了可以都不算得,人家就绝对不可能用硬件实现选择电路,就你自 : 己说可能还是要一定访问 ROM 才算。
|
S*A 发帖数: 7142 | 238
不是很理解,你是要自己设计个板子还是用现成比较接近的就可以了?
你说得这个 pogoplug V4 就有,amazon 上面 $7。
100/
Kernel 启动到 User space 我猜customize kernel 2 秒钟应该可以。
从 USB storage 上读就慢了。还有启动网络也慢,要 link negotiate.
DHCP 等等。但是你这种设备如果就是 Kernel 启动了,网络不能用
大概也不行。
http( 不
我觉得,你现在完全没有概念时间到底慢在什么地方。
花点时间看看 dmesg 知道各个模块各自花多少时间。
probe 一般不是多线程的,进入 user space modprobe 可以多线程。
systemd 就是干这个。 UART 通信非常简单,不需要 probe。 那个几乎
没有时间花在 probe 上面。数据发出去要点时间。
如果我是你可能就先拿那个 pogoplug V4 mobile 试试,有 128M RAM,
128M flash。带 UART, Gigabit ethernet, USB controller, SD card.
先把试验做起来。
【在 b***i 的大作中提到】 : 看来需要bootrom, flash : zed board的Zync 7010是用flash qspi做bootrom, 然后启动Linux 才200美元。 : 之所以需要zync,或者coldfire是因为需要自定义一些串口设备,比如可以调制解调的 : ,可以发送和接收不同速度的等 : usb storage , sd card (SD controller), usb uart silicon lab cp2102, 10/100/ : 1000 ethernet, 这些确定的外设到底可以把启动时间降低到多少?需要ftp, http( 不 : 重要),tcp/ip, 这样的设备不用linux,用其他的比如uCOS如何? : 启动后最先需要做的事情是很简单的串口通信。同时,希望可以继续扫描其他设备,比 : 如网卡,usb 存储器等。这样是否可以提速?
|
S*A 发帖数: 7142 | 239 SPI 硬件时序不是成文规定?
只有 gpio bit banging 的才有资格叫 SPI ?
你开什么玩笑。
这个就是硬件接口口就是标准的 SPI,是低层。
就好像你得 ethernet 是有标准的, 不会里面
能传不同得 http 或者 https 就不是一个标准了。
这两个是不同一层。
SPI 是相当于网络的 Link layer。
里面得数据流如何解释是和 serial flash 有关。
但是下层用得还是 SPI。
你现在又不提到底人家是不是可以直接 SPI
flash map 到地址空间啦?什么到你那里都
是对得,别人都是错的。你是唯一得标准。
【在 x****u 的大作中提到】 : 我就详细解释一下你到底错在哪里。 : 这个datasheet说的spi,和一般说的低速设备常用的i2c,spi不同,是专门为Serial : flash做的接口。SPI不是成文协议,只要有3根或者4根线类似定义的串行通信都可以这 : 么叫。 : 恰好有人做了基于mips和serial flash的Arduino方案,其中spi用的不是内存控制器的 : ,而是用gpio模拟。 : 所以教科书是没错的,专业设计不能让慢速总线拖后腿,给老师代个好吧。
|
x****u 发帖数: 44466 | 240 你也对嵌入式太无知了。
SPI是不成文标准,具体实现方式取决于主从双方的特定约定,和以太网完全没有可比
性。
你的那个芯片,也不支持map spi设备地址,这种事情硬件不可能实现。它支持的是一
种特定的双向串行的flash芯片连内存控制器,这个芯片只是无数spi应用的特例。
Serial
以这
器的
【在 S*A 的大作中提到】 : SPI 硬件时序不是成文规定? : 只有 gpio bit banging 的才有资格叫 SPI ? : 你开什么玩笑。 : 这个就是硬件接口口就是标准的 SPI,是低层。 : 就好像你得 ethernet 是有标准的, 不会里面 : 能传不同得 http 或者 https 就不是一个标准了。 : 这两个是不同一层。 : SPI 是相当于网络的 Link layer。 : 里面得数据流如何解释是和 serial flash 有关。 : 但是下层用得还是 SPI。
|
|
|
S*A 发帖数: 7142 | 241 所以你又放弃了白马不是马的理论了?
你是补是刚才去 wiki 一下 SPI 补了课,发现把这个 SPI EEPROM
硬说成不是你想得那种 bit bang SPI 是闹笑话了吧。
所有用 SPI 得设备,具体到实现上,当然都是实现得特利,
这不是费话吗。你难道要人家 SPI EEPROM 吧所有 SPI
得用法都使用上才能算 SPI?
SPI 本来就是 master 和 slave 得双向通信。人家只有一个
EEPROM 要什么设备地址。设备地址那个是 I2C, 你又搞
混了。 SPI 最多用个 SS 来做 Slave Select。
你到底想说什么?因为 wiki 说 SPI 是 de facto standard
然后你就赶紧跑过来翻译成不成文约定,然后夸张到 SPI
没有写下来的文档如何用?
因为这个 SPI de facto 然后其他使用 SPI 就又不是 SPI 了。
所以 AR9331 支持 SPI EEPROM mapping to CPU address
就无论如何不是个东西。这东西没设备地址还好叫 SPI,
你看看 wiki 的牛人当然比人家设计芯片得懂得多,好好教育
一下人家出 AR9331 那些不懂嵌入式的,文档写个不明白
好让你这种什么都懂得闹了笑话。该死。
当然,什么标准都没有最方便你绕,随便怎麼说都可以。
【在 x****u 的大作中提到】 : 你也对嵌入式太无知了。 : SPI是不成文标准,具体实现方式取决于主从双方的特定约定,和以太网完全没有可比 : 性。 : 你的那个芯片,也不支持map spi设备地址,这种事情硬件不可能实现。它支持的是一 : 种特定的双向串行的flash芯片连内存控制器,这个芯片只是无数spi应用的特例。 : : Serial : 以这 : 器的
|
x****u 发帖数: 44466 | 242 我发现了你那个芯所谓serial flash和普通SPI总线根本无关,怎么被反咬?咱们讨论
的不都是你贴的文档么?
【在 S*A 的大作中提到】 : 所以你又放弃了白马不是马的理论了? : 你是补是刚才去 wiki 一下 SPI 补了课,发现把这个 SPI EEPROM : 硬说成不是你想得那种 bit bang SPI 是闹笑话了吧。 : 所有用 SPI 得设备,具体到实现上,当然都是实现得特利, : 这不是费话吗。你难道要人家 SPI EEPROM 吧所有 SPI : 得用法都使用上才能算 SPI? : SPI 本来就是 master 和 slave 得双向通信。人家只有一个 : EEPROM 要什么设备地址。设备地址那个是 I2C, 你又搞 : 混了。 SPI 最多用个 SS 来做 Slave Select。 : 你到底想说什么?因为 wiki 说 SPI 是 de facto standard
|
m********5 发帖数: 17667 | 243 你还真有空啊
还不如出去跑跑步预防痔疮
【在 S*A 的大作中提到】 : 所以你又放弃了白马不是马的理论了? : 你是补是刚才去 wiki 一下 SPI 补了课,发现把这个 SPI EEPROM : 硬说成不是你想得那种 bit bang SPI 是闹笑话了吧。 : 所有用 SPI 得设备,具体到实现上,当然都是实现得特利, : 这不是费话吗。你难道要人家 SPI EEPROM 吧所有 SPI : 得用法都使用上才能算 SPI? : SPI 本来就是 master 和 slave 得双向通信。人家只有一个 : EEPROM 要什么设备地址。设备地址那个是 I2C, 你又搞 : 混了。 SPI 最多用个 SS 来做 Slave Select。 : 你到底想说什么?因为 wiki 说 SPI 是 de facto standard
|
S*A 发帖数: 7142 | 244 哇,你好牛啊。你说不是就不是吧。
【在 x****u 的大作中提到】 : 我发现了你那个芯所谓serial flash和普通SPI总线根本无关,怎么被反咬?咱们讨论 : 的不都是你贴的文档么?
|
x****u 发帖数: 44466 | 245 你回贴用的是AI机器人么,怎么天天所答非所问?你贴这玩意倒是验证我的观点的,这
个spi根本不是总线而是特定设备,所以有严格的要求。
讨论
【在 S*A 的大作中提到】 : 哇,你好牛啊。你说不是就不是吧。
|
S*A 发帖数: 7142 | 246 老大你真牛。那干嘛人家手册上管这个叫 SPI flash,而且提到连接的
SPI controller?干嘛不叫 “特定设备”flash。
有什么实际得硬件是没有 timing requirement, 要多块都可以要多慢
也行得?
【在 x****u 的大作中提到】 : 你回贴用的是AI机器人么,怎么天天所答非所问?你贴这玩意倒是验证我的观点的,这 : 个spi根本不是总线而是特定设备,所以有严格的要求。 : : 讨论
|
x****u 发帖数: 44466 | 247 我还以为手册都是给学过CS专业基础课的人写的呢,能省不少麻烦。
【在 S*A 的大作中提到】 : 老大你真牛。那干嘛人家手册上管这个叫 SPI flash,而且提到连接的 : SPI controller?干嘛不叫 “特定设备”flash。 : 有什么实际得硬件是没有 timing requirement, 要多块都可以要多慢 : 也行得?
|
S*A 发帖数: 7142 | 248 How about the USB stack in the requirement and the Ethernet driver?
【在 W*****x 的大作中提到】 : 这个用来给SOC建立初始时钟, 激活默认的存储外设访问接口, 加载二级bootloader.
|
S*A 发帖数: 7142 | 249 STM32F4 应该是没法胜任。只有 USB OTG host。 没有
EHCI controller。用 OTG 做 host 要处理很多 EHCI 硬件
处理的功能。浪费很多代码不说,速度还慢。
你要支持 USB-storage 很麻烦的,这个代码改动量绝对
比裁剪 Linux 要多。
STM32F4 主频比较低,这也是个不利的地方。
【在 W*****x 的大作中提到】 : 这个用来给SOC建立初始时钟, 激活默认的存储外设访问接口, 加载二级bootloader.
|
S*A 发帖数: 7142 | 250 Stm32f4 使用硬件加密 SSL
cpu 不用参与太多加密计算。
其他通用的计算就有比较大
区别了。毕竟主频差了几倍。
那个USB OTG 要处理 Hub
什么的都挺麻烦的。要整合的
代码量比较大。
现在可以跑Linux的ARM SOC
也挺便宜的。我看了,那个 $7 pogoplug
v4 的平台没有 PCI 设备,扫描 PCI
可以完全不做。做也没有多少时间。
现在的kernel 就是缺省串口打印console
浪费不少时间。去掉应该有可能不太多
其他改动就可以了。已经全部编译到
uimage 里面,没有 modprobe。
【在 W*****x 的大作中提到】 : 这个用来给SOC建立初始时钟, 激活默认的存储外设访问接口, 加载二级bootloader.
|
|
|
x****u 发帖数: 44466 | 251 这两个东西用软件模拟没有问题,有难度的是TCP/IP协议。
【在 S*A 的大作中提到】 : How about the USB stack in the requirement and the Ethernet driver?
|
S*A 发帖数: 7142 | 252 LZ 这个要求需要明确一下,就是什么是启动以后可以用
的状态。这个设备是不是没有显示器,如果没有得话。
是不是以可以网络连接开始算用户交互使用。 |
b***i 发帖数: 3043 | 253 自定义的串口在芯片内部。
另外,你说的这个pogoplug V4就是
Pogoplug POGO-V4-A1-01 Mobile for iPhone/iPad And Android Devices?
是可以自己编程的吗?
【在 S*A 的大作中提到】 : LZ 这个要求需要明确一下,就是什么是启动以后可以用 : 的状态。这个设备是不是没有显示器,如果没有得话。 : 是不是以可以网络连接开始算用户交互使用。
|
S*A 发帖数: 7142 | 254 你的意思是说可以用串口和你的芯片交互就算
启动完毕了?
那很简单。
对就是 pogoplug V4 mobile。800M CPU. 128M RAM 128M flash。
可以自己编程,我装了个 Arch Linux 进去。
按照这个步骤:
http://archlinuxarm.org/platforms/armv5/pogoplug-series-4
以上步骤我验证过可以用。
然后你要 hack Linux boot loading 的话,需要玩那个 Uboot。
UBoot 相当于 PC 的 BIOS, 负责裸机上找 Linux (flash, usb
或者 sata) 然后引导 Linux。
需要有 TTL 的 USB serial adapter. ($3 at ebay with shipping)。
【在 b***i 的大作中提到】 : 自定义的串口在芯片内部。 : 另外,你说的这个pogoplug V4就是 : Pogoplug POGO-V4-A1-01 Mobile for iPhone/iPad And Android Devices? : 是可以自己编程的吗?
|
S*A 发帖数: 7142 | 255 因为我最近在 hack 这个 Pogoplug V4 mobile。我顺便帮
你看了以下。
我从 UBoot 上面去掉了 serial cosole。这个是 dmesg。
时钟初始化是在 12 妙开始, 并不是 Linux 真正启动了 12 妙。
所以走到 systemd 启动也才 3.5 秒钟。注意其中有 USB 硬盘
访问,因为那个 rootfs 是在 USB 上面。仔细看 demsg,去掉
USB 硬盘访问,去掉 SATA 寻找硬盘,去掉 Ethernet 寻找
Link 的时间,剩下初始化应该就在 2 秒钟以内了。这个 3.5
秒钟很多时间是在和 USB storage 的东西相关。你只要
rootfs 不在 USB flash 上面,这些都可以启动的时候不做。
所以 2 秒钟启动应该是可以的,不需要特别多定制。
基本上改改 kernel config 或者启动参数就可以了。
[ 0.000000] Booting Linux on physical CPU 0x0
[ 0.000000] Initializing cgroup subsys cpuset
[ 0.000000] Initializing cgroup subsys cpu
[ 0.000000] Initializing cgroup subsys cpuacct
[ 0.000000] Linux version 3.15.7-1-ARCH (nobody@root-armv5-copy) (gcc
version 4.8.2 20131219 (prerelease) (GCC) ) #1 PREEMPT Tue Jul 29 19:10:36
MDT 2014
[ 0.000000] CPU: Feroceon 88FR131 [56251311] revision 1 (ARMv5TE), cr=
00053977
[ 0.000000] CPU: VIVT data cache, VIVT instruction cache
[ 0.000000] Machine: Pogoplug V4
[ 0.000000] Memory policy: Data cache writeback
[ 0.000000] On node 0 totalpages: 32768
[ 0.000000] free_area_init_node: node 0, pgdat c07aba5c, node_mem_map
c7efb000
[ 0.000000] Normal zone: 256 pages used for memmap
[ 0.000000] Normal zone: 0 pages reserved
[ 0.000000] Normal zone: 32768 pages, LIFO batch:7
[ 0.000000] pcpu-alloc: s0 r0 d32768 u32768 alloc=1*32768
[ 0.000000] pcpu-alloc: [0] 0
[ 0.000000] Built 1 zonelists in Zone order, mobility grouping on. Total
pages: 32512
[ 0.000000] Kernel command line: root=/dev/sda1 rootwait rootfstype=ext3
[ 0.000000] PID hash table entries: 512 (order: -1, 2048 bytes)
[ 0.000000] Dentry cache hash table entries: 16384 (order: 4, 65536 bytes)
[ 0.000000] Inode-cache hash table entries: 8192 (order: 3, 32768 bytes)
[ 0.000000] Memory: 121192K/131072K available (5547K kernel code, 341K
rwdata, 1700K rodata, 260K init, 833K bss, 9880K reserved)
[ 0.000000] Virtual kernel memory layout:
vector : 0xffff0000 - 0xffff1000 ( 4 kB)
fixmap : 0xfff00000 - 0xfffe0000 ( 896 kB)
vmalloc : 0xc8800000 - 0xff000000 ( 872 MB)
lowmem : 0xc0000000 - 0xc8000000 ( 128 MB)
modules : 0xbf000000 - 0xc0000000 ( 16 MB)
.text : 0xc0008000 - 0xc071bf54 (7248 kB)
.init : 0xc071c000 - 0xc075d364 ( 261 kB)
.data : 0xc075e000 - 0xc07b35dc ( 342 kB)
.bss : 0xc07b35dc - 0xc0883b2c ( 834 kB)
[ 0.000000] SLUB: HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[ 0.000000] Preemptible hierarchical RCU implementation.
[ 0.000000] NR_IRQS:114
[ 0.000017] sched_clock: 32 bits at 166MHz, resolution 6ns, wraps every
25769803770ns
[ 11.905489] Console: colour dummy device 80x30
[ 11.906172] console [tty0] enabled
[ 11.906217] Calibrating delay loop... 795.44 BogoMIPS (lpj=3977216)
[ 11.995356] pid_max: default: 32768 minimum: 301
[ 11.995501] Security Framework initialized
[ 11.995567] AppArmor: AppArmor disabled by boot time parameter
[ 11.995673] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes)
[ 11.995733] Mountpoint-cache hash table entries: 1024 (order: 0, 4096
bytes)
[ 11.996696] Initializing cgroup subsys devices
[ 11.996769] Initializing cgroup subsys freezer
[ 11.996815] Initializing cgroup subsys net_cls
[ 11.996853] Initializing cgroup subsys blkio
[ 11.996888] Initializing cgroup subsys bfqio
[ 11.996924] Initializing cgroup subsys perf_event
[ 11.996966] Initializing cgroup subsys net_prio
[ 11.997104] CPU: Testing write buffer coherency: ok
[ 11.997696] Setting up static identity map for 0x547018 - 0x547070
[ 12.000311] devtmpfs: initialized
[ 12.005397] pinctrl core: initialized pinctrl subsystem
[ 12.005931] NET: Registered protocol family 16
[ 12.006591] DMA: preallocated 256 KiB pool for atomic coherent
allocations
[ 12.008058] cpuidle: using governor ladder
[ 12.008121] cpuidle: using governor menu
[ 12.008268] Kirkwood: MV88F6281-A1, TCLK=166666667.
[ 12.008328] Feroceon L2: Enabling L2
[ 12.008400] Feroceon L2: Cache support initialised.
[ 12.009439] initial MPP regs: 21111111 03303311 00551100 00000000
00000000 00000000 00000000
[ 12.009477] final MPP regs: 21111111 11113311 00551111 00000000
00000000 00000000 00000000
[ 12.011408] Kirkwood PCIe port 0: link down
[ 12.011445] PCI: bus0 uses PCIe port 0
[ 12.011787] PCI host bridge to bus 0000:00
[ 12.011833] pci_bus 0000:00: root bus resource [mem 0xe0000000-0xe7ffffff]
[ 12.011874] pci_bus 0000:00: root bus resource [io 0x1000-0xffff]
[ 12.011912] pci_bus 0000:00: No busn resource found for root bus, will
use [bus 00-ff]
[ 12.011986] pci 0000:00:00.0: [11ab:6281] type 00 class 0x058000
[ 12.012024] pci 0000:00:00.0: reg 0x10: [mem 0xf1000000-0xf10fffff 64bit
pref]
[ 12.012048] pci 0000:00:00.0: reg 0x18: [mem 0x00000000-0x07ffffff]
[ 12.012117] pci 0000:00:00.0: supports D1 D2
[ 12.012446] PCI: bus0: Fast back to back transfers disabled
[ 12.012490] pci_bus 0000:00: busn_res: [bus 00-ff] end is updated to 00
[ 12.025143] vgaarb: loaded
[ 12.025656] SCSI subsystem initialized
[ 12.025929] libata version 3.00 loaded.
[ 12.026374] usbcore: registered new interface driver usbfs
[ 12.026509] usbcore: registered new interface driver hub
[ 12.026698] usbcore: registered new device driver usb
[ 12.026920] pps_core: LinuxPPS API ver. 1 registered
[ 12.026952] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo
Giometti <[email protected]
(function(){try{var s,a,i,j,r,c,l,b=document.getElementsByTagName("script");l=b[b.length-1].previousSibling;a=l.getAttribute('data-cfemail');if(a){s='';r=parseInt(a.substr(0,2),16);for(j=2;a.length-j;j+=2){c=parseInt(a.substr(j,2),16)^r;s+=String.fromCharCode(c);}s=document.createTextNode(s);l.parentNode.replaceChild(s,l);}}catch(e){}})();
/* ]]> */
>
[ 12.027026] PTP clock support registered
[ 12.028314] Switched to clocksource orion_clocksource
[ 12.057367] FS-Cache: Loaded
[ 12.075962] NET: Registered protocol family 2
[ 12.076902] TCP established hash table entries: 1024 (order: 0, 4096
bytes)
[ 12.076969] TCP bind hash table entries: 1024 (order: 0, 4096 bytes)
[ 12.077020] TCP: Hash tables configured (established 1024 bind 1024)
[ 12.077141] TCP: reno registered
[ 12.077178] UDP hash table entries: 256 (order: 0, 4096 bytes)
[ 12.077230] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
[ 12.077502] NET: Registered protocol family 1
[ 12.077592] PCI: CLS 32 bytes, default 32
[ 12.079591] futex hash table entries: 256 (order: -1, 3072 bytes)
[ 12.079697] audit: initializing netlink subsys (disabled)
[ 12.079800] audit: type=2000 audit(0.170:1): initialized
[ 12.237290] VFS: Disk quotas dquot_6.5.2
[ 12.237708] Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)
[ 12.241102] jffs2: version 2.2. (NAND) © 2001-2006 Red Hat, Inc.
[ 12.243774] aufs 3.15-20140728
[ 12.243829] msgmni has been set to 236
[ 12.246338] Block layer SCSI generic (bsg) driver version 0.4 loaded (
major 250)
[ 12.246394] io scheduler noop registered
[ 12.246421] io scheduler deadline registered
[ 12.247097] io scheduler cfq registered
[ 12.247173] io scheduler bfq registered (default)
[ 12.247203] BFQ I/O-scheduler version: v7r5
[ 12.247479] mv_xor mv_xor.0: Marvell shared XOR driver
[ 12.278499] mv_xor mv_xor.0: Marvell XOR: ( xor cpy )
[ 12.318407] mv_xor mv_xor.0: Marvell XOR: ( xor cpy )
[ 12.318716] mv_xor mv_xor.1: Marvell shared XOR driver
[ 12.358416] mv_xor mv_xor.1: Marvell XOR: ( xor cpy )
[ 12.398414] mv_xor mv_xor.1: Marvell XOR: ( xor cpy )
[ 12.406210] Serial: 8250/16550 driver, 2 ports, IRQ sharing disabled
[ 12.427758] serial8250.0: ttyS0 at MMIO 0xf1012000 (irq = 33, base_baud =
10416666) is a 16550A
[ 12.441463] brd: module loaded
[ 12.448124] loop: module loaded
[ 12.448668] sata_mv sata_mv.0: version 1.28
[ 12.448747] sata_mv sata_mv.0: cannot get optional clkdev
[ 12.448874] sata_mv sata_mv.0: slots 32 ports 1
[ 12.451308] scsi0 : sata_mv
[ 12.452198] ata1: SATA max UDMA/133 irq 21
[ 12.453560] nand: device found, Manufacturer ID: 0xad, Chip ID: 0xf1
[ 12.453603] nand: Hynix H27U1G8F2BTR-BC
[ 12.453631] nand: 128MiB, SLC, page size: 2048, OOB size: 64
[ 12.453674] Scanning device for bad blocks
[ 12.486253] Bad eraseblock 509 at 0x000003fa0000
[ 12.519246] Creating 5 MTD partitions on "orion_nand":
[ 12.519298] 0x000000000000-0x000000200000 : "u-boot"
[ 12.519998] 0x000000200000-0x000000500000 : "uImage"
[ 12.520631] 0x000000500000-0x000000800000 : "uImage2"
[ 12.521234] 0x000000800000-0x000001000000 : "failsafe"
[ 12.521848] 0x000001000000-0x000008000000 : "root"
[ 12.523288] m25p80 spi0.0: m25p05-nonjedec (64 Kbytes)
[ 12.532559] libphy: orion_mdio_bus: probed
[ 12.532727] mv643xx_eth: MV-643xx 10/100/1000 ethernet driver version 1.4
[ 12.808353] ata1: SATA link down (SStatus 0 SControl F300)
[ 13.607042] mv643xx_eth_port mv643xx_eth_port.0 eth0: port 0 with MAC
address 00:25:31:05:d7:6d
[ 13.607276] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[ 13.607313] ehci-pci: EHCI PCI platform driver
[ 13.607427] ehci-orion: EHCI orion driver
[ 13.607553] orion-ehci orion-ehci.0: EHCI Host Controller
[ 13.607623] orion-ehci orion-ehci.0: new USB bus registered, assigned bus
number 1
[ 13.607883] orion-ehci orion-ehci.0: irq 19, io mem 0xf1050000
[ 13.618376] orion-ehci orion-ehci.0: USB 2.0 started, EHCI 1.00
[ 13.619718] hub 1-0:1.0: USB hub found
[ 13.619801] hub 1-0:1.0: 1 port detected
[ 13.620802] usbcore: registered new interface driver usb-storage
[ 13.621405] mousedev: PS/2 mouse device common for all mice
[ 13.938388] usb 1-1: new high-speed USB device number 2 using orion-ehci
[ 14.090344] usb-storage 1-1:1.0: USB Mass Storage device detected
[ 14.090761] scsi1 : usb-storage 1-1:1.0
[ 14.628357] rtc-mv rtc-mv: internal RTC not ticking
[ 14.628577] i2c /dev entries driver
[ 14.629330] orion_wdt: Initial timeout 25 sec
[ 14.629889] sdhci: Secure Digital Host Controller Interface driver
[ 14.629925] sdhci: Copyright(c) Pierre Ossman
[ 14.630041] mvsdio mvsdio: no pins associated
[ 14.668359] mvsdio mvsdio: using GPIO for card detection
[ 14.668459] sdhci-pltfm: SDHCI platform and OF driver helper
[ 14.669203] ledtrig-cpu: registered to indicate activity on CPUs
[ 14.669429] usbcore: registered new interface driver r8712u
[ 14.669675] gre: GRE over IPv4 demultiplexor driver
[ 14.669721] TCP: cubic registered
[ 14.669750] NET: Registered protocol family 17
[ 14.670037] Key type dns_resolver registered
[ 14.674174] registered taskstats version 1
[ 14.675920] console [netcon0] enabled
[ 14.675957] netconsole: network logging started
[ 14.676707] input: gpio-keys as /devices/platform/gpio-keys/input/input0
[ 14.677178] drivers/rtc/hctosys.c: unable to open rtc device (rtc0)
[ 14.679972] Waiting for root device /dev/sda1...
[ 15.089430] scsi 1:0:0:0: Direct-Access SanDisk Cruzer Fit 1.
27 PQ: 0 ANSI: 6
[ 15.091057] sd 1:0:0:0: Attached scsi generic sg0 type 0
[ 15.092447] sd 1:0:0:0: [sda] 15633408 512-byte logical blocks: (8.00 GB/
7.45 GiB)
[ 15.093681] sd 1:0:0:0: [sda] Write Protect is off
[ 15.093725] sd 1:0:0:0: [sda] Mode Sense: 43 00 00 00
[ 15.094428] sd 1:0:0:0: [sda] Write cache: disabled, read cache: enabled,
doesn't support DPO or FUA
[ 15.100543] sda: sda1
[ 15.104185] sd 1:0:0:0: [sda] Attached SCSI removable disk
[ 15.200484] kjournald starting. Commit interval 5 seconds
[ 15.202319] EXT3-fs (sda1): using internal journal
[ 15.204311] EXT3-fs (sda1): recovery complete
[ 15.204350] EXT3-fs (sda1): mounted filesystem with writeback data mode
[ 15.204433] VFS: Mounted root (ext3 filesystem) on device 8:1.
[ 15.206731] devtmpfs: mounted
[ 15.207982] Freeing unused kernel memory: 260K (c071c000 - c075d000)
[ 15.439596] random: systemd urandom read with 25 bits of entropy
available
[ 15.449542] systemd[1]: systemd 215 running in system mode. (+PAM -AUDIT
-SELINUX -IMA -SYSVINIT +LIBCRYPTSETUP +GCRYPT +ACL +XZ +SECCOMP -APPARMOR)
[ 15.450021] systemd[1]: Detected architecture 'arm'.
[ 15.503132] systemd[1]: Inserted module 'autofs4'
[ 15.555670] NET: Registered protocol family 10
[ 15.557304] systemd[1]: Inserted module 'ipv6'
[ 15.560656] systemd[1]: Set hostname to . |
x****u 发帖数: 44466 | 256 去掉serial console应该是最后一步,串口输出可以准确的比较各种初始化的耗时。
【在 S*A 的大作中提到】 : 因为我最近在 hack 这个 Pogoplug V4 mobile。我顺便帮 : 你看了以下。 : 我从 UBoot 上面去掉了 serial cosole。这个是 dmesg。 : 时钟初始化是在 12 妙开始, 并不是 Linux 真正启动了 12 妙。 : 所以走到 systemd 启动也才 3.5 秒钟。注意其中有 USB 硬盘 : 访问,因为那个 rootfs 是在 USB 上面。仔细看 demsg,去掉 : USB 硬盘访问,去掉 SATA 寻找硬盘,去掉 Ethernet 寻找 : Link 的时间,剩下初始化应该就在 2 秒钟以内了。这个 3.5 : 秒钟很多时间是在和 USB storage 的东西相关。你只要 : rootfs 不在 USB flash 上面,这些都可以启动的时候不做。
|
S*A 发帖数: 7142 | 257 我的 dmesg 已经说明没有 USB root 的话,
那个 Linux 可以 2 秒钟左右启动到 systemd。
每行 dmesg 都有 time stamp, 非常精确。
还有一个要注意的是 Uboot,那个 Uboot 本身
有些 boot wait 是给调式用的,最终版本如果
要尽可能快得的话要把这些也去掉。
Pogoplug 启动时间那么长,很多和这些交互调式
的有关。 |
b***i 发帖数: 3043 | 258 看来这个pogoplug要买两个,一个用来给iPad用,一个给我自己瞎折腾玩。
以前做过uClinux,所以用过uboot。当时只做到每次都tftp,因为还在调试阶段。需要
克服的障碍太多,就放弃了。现在仍然用没有OS的。
未来目的是,使用OS,为了方便SD卡文件存储,100M以太网操作,未来可能的USB存储,
也要在板上的Flash进行某些信息的存储,比如uboot等。现在我们进行存储操作的时候
,还要经常进行串口口操作,因为这个是最重要的任务。如果使用OS,多任务,就不用
操这个心了。
启动后,需要快速开始进行串口通信。其他任务可以推后,比如以太网,可以慢慢来。
没有显示器。可能会有LED屏,不重要,可以慢慢启动。无键盘鼠标,可能有几个按钮
。主要任务是串口通信(这个为什么用Zync,coldfire,因为可以特制串口硬件在芯片
内部。),网络通信。
【在 S*A 的大作中提到】 : 你的意思是说可以用串口和你的芯片交互就算 : 启动完毕了? : 那很简单。 : 对就是 pogoplug V4 mobile。800M CPU. 128M RAM 128M flash。 : 可以自己编程,我装了个 Arch Linux 进去。 : 按照这个步骤: : http://archlinuxarm.org/platforms/armv5/pogoplug-series-4 : 以上步骤我验证过可以用。 : 然后你要 hack Linux boot loading 的话,需要玩那个 Uboot。 : UBoot 相当于 PC 的 BIOS, 负责裸机上找 Linux (flash, usb
|
S*A 发帖数: 7142 | 259 这个 pogoplug V4 现在 ebay 就 $9 with free shipping。
http://www.ebay.com/itm/Pogoplug-POGO-V4-A1-01-Mobile-for-iPhon
你去买个 8 Bit 的 Arduino 也要差不多钱,还要弱很多。
另外一个选择是 Raspberry Pi,那个也带串口和 GPIO。
有USB,SD card (rootfs),ethernet 和 HDMI。
如果只需要串口响应的话那真的很容易,这个串口是内置在
SOC 里面的。
【在 b***i 的大作中提到】 : 看来这个pogoplug要买两个,一个用来给iPad用,一个给我自己瞎折腾玩。 : 以前做过uClinux,所以用过uboot。当时只做到每次都tftp,因为还在调试阶段。需要 : 克服的障碍太多,就放弃了。现在仍然用没有OS的。 : 未来目的是,使用OS,为了方便SD卡文件存储,100M以太网操作,未来可能的USB存储, : 也要在板上的Flash进行某些信息的存储,比如uboot等。现在我们进行存储操作的时候 : ,还要经常进行串口口操作,因为这个是最重要的任务。如果使用OS,多任务,就不用 : 操这个心了。 : 启动后,需要快速开始进行串口通信。其他任务可以推后,比如以太网,可以慢慢来。 : 没有显示器。可能会有LED屏,不重要,可以慢慢启动。无键盘鼠标,可能有几个按钮 : 。主要任务是串口通信(这个为什么用Zync,coldfire,因为可以特制串口硬件在芯片
|
x****u 发帖数: 44466 | 260 Arduino淘宝上12块一片。。。
这玩意的优点是体积小省电,开发界面傻瓜化。
【在 S*A 的大作中提到】 : 这个 pogoplug V4 现在 ebay 就 $9 with free shipping。 : http://www.ebay.com/itm/Pogoplug-POGO-V4-A1-01-Mobile-for-iPhon : 你去买个 8 Bit 的 Arduino 也要差不多钱,还要弱很多。 : 另外一个选择是 Raspberry Pi,那个也带串口和 GPIO。 : 有USB,SD card (rootfs),ethernet 和 HDMI。 : 如果只需要串口响应的话那真的很容易,这个串口是内置在 : SOC 里面的。
|
|
|
S*A 发帖数: 7142 | 261
对了,你买 pogoplug 之后,最好给焊接个串口,
通过串口可以不用activate 登陆。或者 activate 之后
用 SSH 登陆。
另外一个有用得东西是先把你的 flash 做个 dump,
特别是 UBoot 的 BLPARAM 区。如果搞坏了原来的
flash image 可以有备份刷回来。
【在 b***i 的大作中提到】 : 看来这个pogoplug要买两个,一个用来给iPad用,一个给我自己瞎折腾玩。 : 以前做过uClinux,所以用过uboot。当时只做到每次都tftp,因为还在调试阶段。需要 : 克服的障碍太多,就放弃了。现在仍然用没有OS的。 : 未来目的是,使用OS,为了方便SD卡文件存储,100M以太网操作,未来可能的USB存储, : 也要在板上的Flash进行某些信息的存储,比如uboot等。现在我们进行存储操作的时候 : ,还要经常进行串口口操作,因为这个是最重要的任务。如果使用OS,多任务,就不用 : 操这个心了。 : 启动后,需要快速开始进行串口通信。其他任务可以推后,比如以太网,可以慢慢来。 : 没有显示器。可能会有LED屏,不重要,可以慢慢启动。无键盘鼠标,可能有几个按钮 : 。主要任务是串口通信(这个为什么用Zync,coldfire,因为可以特制串口硬件在芯片
|
b***i 发帖数: 3043 | 262 新的信息
大神帮看看那里可以提高?
[ 0.128265] omap_i2c omap_i2c.1: bus 1 rev2.4.0 at 100 kHz
[ 0.129791] tps65910 1-002d: JTAGREVNUM 0x1
[ 0.133728] print_constraints: VRTC:
[ 0.135223] print_constraints: VIO: at 1500 mV
[ 0.137603] print_constraints: VDD1: 600 <--> 1500 mV at 1100 mV normal
[ 0.139923] print_constraints: VDD2: at 1100 mV
[ 0.140960] print_constraints: VDD3: 5000 mV
[ 0.142425] print_constraints: VDIG1: at 1800 mV
[ 0.143890] print_constraints: VDIG2: at 1800 mV
[ 0.145385] print_constraints: VPLL: at 1800 mV
[ 0.146820] print_constraints: VDAC: at 1800 mV
[ 0.148284] print_constraints: VAUX1: at 1800 mV
[ 0.149780] print_constraints: VAUX2: at 3300 mV
[ 0.151245] print_constraints: VAUX33: at 3300 mV
[ 0.152709] print_constraints: VMMC: at 3300 mV
[ 0.169860] Advanced Linux Sound Architecture Driver Version 1.0.24.
[ 0.171356] cfg80211: Calling CRDA to update world regulatory domain
[ 0.172729] Switching to clocksource gp timer
[ 0.194000] musb-hdrc: version 6.0, ?dma?, otg (peripheral+host)
[ 0.194183] musb-hdrc musb-hdrc.0: dma type: pio
[ 0.194580] MUSB0 controller's USBSS revision = 4ea20800
[ 0.194610] musb0: Enabled SW babble control
[ 0.195251] musb-hdrc musb-hdrc.0: USB OTG mode controller at e083c000
using PIO, IRQ 18
[ 0.195434] musb-hdrc musb-hdrc.1: dma type: pio
[ 0.195770] MUSB1 controller's USBSS revision = 4ea20800
[ 0.195526] musb1: Enabled SW babble control
[ 0.195648] musb-hdrc musb-hdrc.1: MUSB HDRC host driver
[ 0.195739] musb-hdrc musb-hdrc.1: new USB bus registered, assigned bus
number 1
[ 0.195892] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002
[ 0.195892] usb usb1: New USB device strings: Mfr=3, Product=2,
SerialNumber=1
[ 0.195922] usb usb1: Product: MUSB HDRC host driver
[ 0.195922] usb usb1: Manufacturer: Linux 3.2.0-PD13.1.2 musb-hcd
[ 0.195922] usb usb1: SerialNumber: musb-hdrc.1
[ 0.196899] hub 1-0:1.0: USB hub found
[ 0.196929] hub 1-0:1.0: 1 port detected
[ 0.197570] musb-hdrc musb-hdrc.1: USB Host mode controller at e083e800
using PIO, IRQ 19
[ 0.198059] NET: Registered protocol family 2
[ 0.198272] IP route cache hash table entries: 4096 (order: 2, 16384
bytes)
[ 0.198608] TCP established hash table entries: 16384 (order: 5, 131072
bytes)
[ 0.198974] TCP bind hash table entries: 16384 (order: 4, 65536 bytes)
[ 0.199157] TCP: Hash tables configured (established 16384 bind 16384)
[ 0.199188] TCP reno registered
[ 0.199188] UDP hash table entries: 256 (order: 0, 4096 bytes)
[ 0.199218] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
[ 0.199462] NET: Registered protocol family 1
[ 0.199768] RPC: Registered named UNIX socket transport module.
[ 0.199768] RPC: Registered udp transport module.
[ 0.199798] RPC: Registered tcp transport module.
[ 0.199798] RPC: Registered tcp NFSv4.1 backchannel transport module.
[ 0.200042] NetWinder Floating Point Emulator V0.97 (double precision)
[ 0.200286] omap-gpmc omap-gpmc: GPMC revision 6.0
[ 0.200317] Registering NAND on CS0
[ 0.222015] VFS: Disk quotas dquot_6.5.2
[ 0.222106] Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)
[ 0.222747] JFFS2 version 2.2. (NAND) (SUMMARY) © 2001-2006 Red Hat
, Inc.
[ 0.223114] msgmni has been set to 1002
[ 0.223968] io scheduler noop registered
[ 0.223999] io scheduler deadline registered
[ 0.224060] io scheduler cfq registered (default)
[ 0.225921] da8xx_lcdc da8xx_lcdc.0: GLCD: Found PV_PM070WL4 panel
[ 0.248168] Console: switching to colour frame buffer device 100x30
[ 0.258911] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled
[ 0.260925] omap_uart.0: ttyO0 at MMIO 0x44e09000 (irq = 72) is a OMAP
UART0
[ 1.005676] console [ttyO0] enabled
[ 1.010131] omap_uart.1: ttyO1 at MMIO 0x48022000 (irq = 73) is a OMAP
UART1
[ 1.018096] omap_uart.2: ttyO2 at MMIO 0x48024000 (irq = 74) is a OMAP
UART2
[ 1.026031] omap_uart.3: ttyO3 at MMIO 0x481a6000 (irq = 44) is a OMAP
UART3
[ 1.033966] omap_uart.4: ttyO4 at MMIO 0x481a8000 (irq = 45) is a OMAP
UART4
[ 1.041870] omap_uart.5: ttyO5 at MMIO 0x481aa000 (irq = 46) is a OMAP
UART5
[ 1.061431] brd: module loaded
[ 1.070770] loop: module loaded
[ 1.074340] i2c-core: driver [tsl2550] using legacy suspend method
[ 1.080871] i2c-core: driver [tsl2550] using legacy resume method
[ 1.087371] at24 1-0052: 4096 byte 24c32 EEPROM, writable, 32 bytes/write
[ 1.098480] m25p80 spi1.0: found s25sl064a, expected w25q64
[ 1.104431] m25p80 spi1.0: s25sl064a (8192 Kbytes)
[ 1.109527] 5 cmdlinepart partitions found on MTD device spi_flash
[ 1.116058] Creating 5 MTD partitions on "spi_flash":
[ 1.121368] 0x000000000000-0x000000020000 : "m25p0.xload"
[ 1.128875] 0x000000020000-0x0000000a0000 : "m25p0.barebox"
[ 1.136352] 0x0000000a0000-0x0000000c0000 : "m25p0.bareboxenv"
[ 1.144104] 0x0000000c0000-0x0000004c0000 : "m25p0.kernel"
[ 1.151458] 0x0000004c0000-0x000000800000 : "m25p0.root"
[ 1.159393] omap2-nand driver initializing
[ 1.164093] ONFI flash detected
[ 1.167480] ONFI param page 0 valid
[ 1.171173] NAND device: Manufacturer ID: 0x2c, Chip ID: 0xdc (Micron
MT29F4G08ABADAH4)
[ 1.179656] 8 cmdlinepart partitions found on MTD device omap2-nand.0
[ 1.186462] Creating 8 MTD partitions on "omap2-nand.0":
[ 1.192047] 0x000000000000-0x000000020000 : "nand0.xload"
[ 1.199554] 0x000000020000-0x000000040000 : "nand0.xload_backup1"
[ 1.207702] 0x000000040000-0x000000060000 : "nand0.xload_backup2"
[ 1.215759] 0x000000060000-0x000000080000 : "nand0.xload_backup3"
[ 1.223846] 0x000000080000-0x000000100000 : "nand0.barebox"
[ 1.231689] 0x000000100000-0x000000120000 : "nand0.bareboxenv"
[ 1.239532] 0x000000120000-0x000000920000 : "nand0.kernel"
[ 1.253723] 0x000000920000-0x000020000000 : "nand0.root"
[ 1.686462] OneNAND driver initializing
[ 1.691406] UBI: attaching mtd12 to ubi0
[ 1.695617] UBI: physical eraseblock size: 131072 bytes (128 KiB)
[ 1.702209] UBI: logical eraseblock size: 126976 bytes
[ 1.707916] UBI: smallest flash I/O unit: 2048
[ 1.712860] UBI: VID header offset: 2048 (aligned 2048)
[ 1.719207] UBI: data offset: 4096
[ 3.997009] UBI: max. sequence number: 361
[ 4.015686] UBI: attached mtd12 to ubi0
[ 4.019744] UBI: MTD device name: "nand0.root"
[ 4.025482] UBI: MTD device size: 502 MiB
[ 4.030700] UBI: number of good PEBs: 4023
[ 4.035675] UBI: number of bad PEBs: 0
[ 4.040344] UBI: number of corrupted PEBs: 0
[ 4.045043] UBI: max. allowed volumes: 128
[ 4.049896] UBI: wear-leveling threshold: 4096
[ 4.054840] UBI: number of internal volumes: 1
[ 4.059539] UBI: number of user volumes: 1
[ 4.064208] UBI: available PEBs: 0
[ 4.068878] UBI: total number of reserved PEBs: 4023
[ 4.074127] UBI: number of PEBs reserved for bad PEB handling: 40
[ 4.080535] UBI: max/mean erase counter: 3/0
[ 4.085052] UBI: image sequence number: 1331
[ 4.089782] UBI: background thread "ubi_bgt0d" started, PID 577
[ 4.097656] CAN device driver interface
[ 4.101684] CAN bus driver for Bosch D_CAN controller 1.0
[ 4.108337] d_can d_can.1: device registered (irq=55, irq_obj=56)
[ 4.163238] davinci_mdio davinci_mdio.0: davinci mdio revision 1.6
[ 4.169769] davinci_mdio davinci_mdio.0: detected phy mask fffffffa
[ 4.177947] CLKSKEW == 0x7070
[ 4.181579] RXSKEW == 0x0
[ 4.184844] TXSKEW == 0x0
[ 4.187835] davinci_mdio.0: probed
[ 4.191406] davinci_mdio davinci_mdio.0: phy[0]: device 0:00, driver SMSC
LAN8710/LAN8720
[ 4.200042] davinci_mdio davinci_mdio.0: phy[2]: device 0:02, driver
Micrel KSZ9021 Gigabit PHY
[ 4.209686] usbcore: registered new interface driver cdc_ether
[ 4.216033] usbcore: registered new interface driver cdc_subset
[ 4.222320] Initializing USB Mass Storage driver...
[ 4.227752] usbcore: registered new interface driver usb-storage
[ 4.234069] USB Mass Storage support registered.
[ 4.239379] usbcore: registered new interface driver usbserial
[ 4.245544] usbserial: USB Serial Driver core
[ 4.250793] mousedev: PS/2 mouse device common for all mice
[ 4.257568] edt_ft5x06 1-0038: touchscreen probe failed
[ 4.263092] edt_ft5x06: probe of 1-0038 failed with error -121
[ 4.270080] input: ti-tsc as /devices/platform/omap/ti_tscadc/tsc/input/
input0
[ 4.278594] rtc-m41t80 1-0068: chip found, driver version 0.05
[ 4.286315] rtc-m41t80 1-0068: rtc core: registered rv4162c7 as rtc0
[ 4.294647] omap_rtc am33xx-rtc: rtc core: registered am33xx-rtc as rtc1
[ 4.301757] am33xx-rtc: already running
[ 4.314117] tps65910-rtc tps65910-rtc: rtc core: registered tps65910-rtc
as rtc2
[ 4.323791] i2c /dev entries driver
[ 4.328338] lirc_dev: IR Remote Control driver registered, major 251
[ 4.335144] IR NEC protocol handler initialized
[ 4.339935] IR RC5(x) protocol handler initialized
[ 4.344970] IR RC6 protocol handler initialized
[ 4.349731] IR JVC protocol handler initialized
[ 4.354492] IR Sony protocol handler initialized
[ 4.359375] IR RC5 (streamzap) protocol handler initialized
[ 4.365234] IR MCE Keyboard/mouse protocol handler initialized
[ 4.371368] IR LIRC bridge handler initialized
[ 4.376037] Linux video capture interface: v2.00
[ 4.381317] usbcore: registered new interface driver uvcvideo
[ 4.387390] USB Video Class driver (1.1.1)
[ 4.394165] OMAP Watchdog Timer Rev 0x01: initial timeout 60 sec
[ 4.402923] cpuidle: using governor ladder
[ 4.407928] cpuidle: using governor menu
[ 4.417022] usbcore: registered new interface driver usbhid
[ 4.422882] usbhid: USB HID core driver
[ 4.427764] usbcore: registered new interface driver snd-usb-audio
[ 4.538757] asoc: wm8974-hifi <-> davinci-mcasp.0 mapping ok
[ 4.546386] ALSA device list:
[ 4.549530] #0: PCM051 audio
[ 4.552764] oprofile: hardware counters not available
[ 4.558105] oprofile: using timer interrupt.
[ 4.562622] nf_conntrack version 0.5.0 (8016 buckets, 32064 max)
[ 4.569580] ip_tables: (C) 2000-2006 Netfilter Core Team
[ 4.575347] TCP cubic registered
[ 4.578765] NET: Registered protocol family 17
[ 4.583465] can: controller area network core (rev 20090105 abi 8)
[ 4.590057] NET: Registered protocol family 29
[ 4.594787] can: raw protocol (rev 20090105)
[ 4.599273] can: broadcast manager protocol (rev 20090105 t)
[ 4.605316] Registering the dns_resolver key type
[ 4.610321] VFP support v0.3: implementor 41 architecture 3 part 30
variant c rev 3
[ 4.618438] ThumbEE CPU extension supported.
[ 4.623809] Power Management for AM33XX family
[ 4.637207] Detected MACID=d0:5f:b8:88:f8:e3
[ 4.643005] cpsw: Detected MACID = d0:5f:b8:88:f8:e5
[ 4.650573] rtc-m41t80 1-0068: hctosys: unable to read the hardware clock
[ 4.662689] net eth0: CPSW phy found : id is : 0x7c0f1
[ 5.693603] IP-Config: Complete:
[ 5.697052] device=eth0, addr=192.168.3.11, mask=255.255.255.0, gw=
192.168.3.10,
[ 5.705139] host=192.168.3.11, domain=, nis-domain=(none),
[ 5.711425] bootserver=192.168.3.10, rootserver=192.168.3.10,
rootpath=
[ 5.759368] UBIFS: recovery needed
[ 5.846801] UBIFS: recovery completed
[ 5.850708] UBIFS: mounted UBI device 0, volume 0, name "root"
[ 5.856964] UBIFS: file system size: 497491968 bytes (485832 KiB, 474
MiB, 3918 LEBs)
[ 5.865478] UBIFS: journal size: 9023488 bytes (8812 KiB, 8 MiB, 72
LEBs)
[ 5.873229] UBIFS: media format: w4/r0 (latest is w4/r0)
[ 5.879394] UBIFS: default compressor: lzo
[ 5.883758] UBIFS: reserved for root: 0 bytes (0 KiB)
[ 5.890350] VFS: Mounted root (ubifs filesystem) on device 0:14.
[ 5.898193] devtmpfs: mounted
[ 5.902130] Freeing init memory: 236K
init started: BusyBox v1.20.2 (2014-01-09 16:33:52 CET)
starting pid 685, tty '/dev/console': '/etc/init.d/rcS'
mounting filesystems...done.
running rc.d services...
starting udev
creating static nodes
starting udevd...done
[ 6.343505] udevd[702]: starting version 182
waiting for devices...done
syslogd starting
klogd starting
crond starting
Starting system message bus: dbus.
hwclock: RTC_RD_TIME: Invalid argument
starting sshd...done
Starting telnetd...
restoring mixer state...done
starting network interfaces...
RTNETLINK answers: File exists
RTNETLINK answers: File exists
[ 7.641815] CLKSKEW == 0x7070
[ 7.645507] RXSKEW == 0x0
[ 7.648773] TXSKEW == 0x0
[ 7.651519] net eth1: CPSW phy found : id is : 0x221611
[ 7.684906] d_can d_can.1: can0: setting CAN BT = 0x209
lighttpd: starting
lighttpd: done
/usr/sbin/pure-ftpd
pure-ftpd: starting pure-ftpd: /usr/sbin/pure-ftpd
/usr/sbin/pure-uploadscript
pure-ftpd: starting upload helper daemon...
done
starting inetd...done
loading modules
[ 8.027832] Disabling lock debugging due to kernel taint
Loaded PowerVR consumer services.
starting pid 834, tty '/dev/console': '/sbin/getty -L 115200 ttyO0 vt100'
【在 S*A 的大作中提到】 : 因为我最近在 hack 这个 Pogoplug V4 mobile。我顺便帮 : 你看了以下。 : 我从 UBoot 上面去掉了 serial cosole。这个是 dmesg。 : 时钟初始化是在 12 妙开始, 并不是 Linux 真正启动了 12 妙。 : 所以走到 systemd 启动也才 3.5 秒钟。注意其中有 USB 硬盘 : 访问,因为那个 rootfs 是在 USB 上面。仔细看 demsg,去掉 : USB 硬盘访问,去掉 SATA 寻找硬盘,去掉 Ethernet 寻找 : Link 的时间,剩下初始化应该就在 2 秒钟以内了。这个 3.5 : 秒钟很多时间是在和 USB storage 的东西相关。你只要 : rootfs 不在 USB flash 上面,这些都可以启动的时候不做。
|