A*y
2 楼
???
b*t
3 楼
@staples
# Staples has Logitech Illuminated Ultrathin Keyboard with Backlighting for
$49.99 with free shipping for $50+ orders
# Buy 2 and apply $25 off $75 off coupon from e-junkie = ( $50 x 2 - $25
off ) /2 = $37.5 each with free shipping
http://www.staples.com/Logitech-Illuminated-Keyboard/product-nr_774128?cmArea=SEARCH
# Staples has Logitech Illuminated Ultrathin Keyboard with Backlighting for
$49.99 with free shipping for $50+ orders
# Buy 2 and apply $25 off $75 off coupon from e-junkie = ( $50 x 2 - $25
off ) /2 = $37.5 each with free shipping
http://www.staples.com/Logitech-Illuminated-Keyboard/product-nr_774128?cmArea=SEARCH
b*i
4 楼
目的是嵌入式系统,比如ARM 600MHz,512M内存,SD card,USB,ethernet等都是固定
的硬件,比如像苹果手机那样。
那么,能做到启动Linux使用2秒钟以内吗?
的硬件,比如像苹果手机那样。
那么,能做到启动Linux使用2秒钟以内吗?
H*1
5 楼
meiyou
n*7
7 楼
BF27刀。
s*u
8 楼
加电到进入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秒左右
吧
上电-->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
11 楼
p*n
16 楼
打印机修好了?美女啊,就是右腿和左腿,这个?
S*A
19 楼
可以hibernate. 但是不可能2 秒钟。
因为读入状态文件要先初始化硬盘和驱动。
2 秒sleep 可以。有distro 这么干过。
因为读入状态文件要先初始化硬盘和驱动。
2 秒sleep 可以。有distro 这么干过。
s*u
29 楼
看小电影跟这个倒是没关系,内部存储和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要是就这点速度,看个小电影都做不到。
不过我承认确实是低估了,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
30 楼
现在的芯片都是内置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.
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
31 楼
感叹一下,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.
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*A
52 楼
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烧上逻辑和这边通信?
能够跑 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
53 楼
我当时理解错了,说的是 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 里,这样才最快最省
其实 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 里,这样才最快最省
s*u
56 楼
扯了一大圈好像没人在回答楼主最早的问题了,呵呵
你的是基于什么开发板的么?如果是的话找个对应的device tree,还有那些device对
应的module什么的,编译一个kernel出来应该还不太麻烦。如果是完全自己设计的板子
那相对麻烦多了,不过要能自己设计开发板,搞定个kernel build应该不是问题吧
可以去看看yocto
https://www.yoctoproject.org/
【在 b***i 的大作中提到】
: 目的是嵌入式系统,比如ARM 600MHz,512M内存,SD card,USB,ethernet等都是固定
: 的硬件,比如像苹果手机那样。
: 那么,能做到启动Linux使用2秒钟以内吗?
你的是基于什么开发板的么?如果是的话找个对应的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
57 楼
我说那个看 dmesg 的应该是相关的吧。把 time stamp 打开。
看看启动引导的时候时间都花在什么模块上了。
基本上, CPU 是很快的。慢的是外设。你要用的外设越多,
越容易慢。找到最慢的部分看看如何能简化。
【在 s******u 的大作中提到】
: 扯了一大圈好像没人在回答楼主最早的问题了,呵呵
: 你的是基于什么开发板的么?如果是的话找个对应的device tree,还有那些device对
: 应的module什么的,编译一个kernel出来应该还不太麻烦。如果是完全自己设计的板子
: 那相对麻烦多了,不过要能自己设计开发板,搞定个kernel build应该不是问题吧
: 可以去看看yocto
: https://www.yoctoproject.org/
看看启动引导的时候时间都花在什么模块上了。
基本上, CPU 是很快的。慢的是外设。你要用的外设越多,
越容易慢。找到最慢的部分看看如何能简化。
【在 s******u 的大作中提到】
: 扯了一大圈好像没人在回答楼主最早的问题了,呵呵
: 你的是基于什么开发板的么?如果是的话找个对应的device tree,还有那些device对
: 应的module什么的,编译一个kernel出来应该还不太麻烦。如果是完全自己设计的板子
: 那相对麻烦多了,不过要能自己设计开发板,搞定个kernel build应该不是问题吧
: 可以去看看yocto
: https://www.yoctoproject.org/
b*i
58 楼
一个方案是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/
另一个是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
59 楼
人楼主问的就是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方便些。
有啥好争的?
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方便些。
S*A
61 楼
你可以先把不需要的模块 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
62 楼
我就知道这帖子能把民科都引过来。
外置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 就比
外置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
63 楼
就说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 就比
一般说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
64 楼
嵌入 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上,大师你在说什么啊。。。
你没有概念就不要出来显了。
给个常见的 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
65 楼
所以说你缺乏根本概念。
虽然存储设备差不多,但对于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 上的。
虽然存储设备差不多,但对于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
72 楼
傻冒了吧, 这个特定地址,在 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,你说的这个只是外存
: 而已。
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
73 楼
这就是对体系结构无知才有的想法。
"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 的。
: 你如何绕也是绕不过的。
"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
74 楼
是你自己不能区分 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年前要用硬盘模拟内存的也是你吧。
你说的 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
75 楼
你无论如何绕,绕不过去 beagleboard 的 bootrom 就是 I2C 里。
http://elinux.org/BeagleBoardPinMux
没有其他 ARM 上的 flash。
【在 x****u 的大作中提到】
: 这就是对体系结构无知才有的想法。
: "CPU翻译地址访问"...你知不知道CPU是高速设备,不考虑cache只能访问地址总线,这
: 尼玛里面的设备和步骤多了去了,一个I2C是转了N层才挂上的。
: 直接接不是行为艺术是什么。
http://elinux.org/BeagleBoardPinMux
没有其他 ARM 上的 flash。
【在 x****u 的大作中提到】
: 这就是对体系结构无知才有的想法。
: "CPU翻译地址访问"...你知不知道CPU是高速设备,不考虑cache只能访问地址总线,这
: 尼玛里面的设备和步骤多了去了,一个I2C是转了N层才挂上的。
: 直接接不是行为艺术是什么。
x*u
76 楼
我倒,你藏拙吧。
这点事情和MMU以及paging毛关系也没有,这两个是纯软件层概念,x86都是启动后软件
开关。
【在 S*A 的大作中提到】
: 是你自己不能区分 CPU 内部地址和外部地址。
: 你说的 CPU 对地址线的操作,就是内部地址,
: 经过 paging 以后翻译到物理地址。
: 物理地址最后在芯片外部是要访问外部地址。
: 外部地址就是芯片借口,包括 EEPROM 和 RAM
: 这些。这个外部地址可以是 I2C, 也可以是ram bus。
: 也可以是 SPI。要看这个 CPU 外设支持什么。
: 你不如就 beagleboard 这个例子展开说一下
: 这个启动过程是如何用软件加载 I2C loading
: code 的吧,如果 I2C 仅仅是硬盘外设备。
这点事情和MMU以及paging毛关系也没有,这两个是纯软件层概念,x86都是启动后软件
开关。
【在 S*A 的大作中提到】
: 是你自己不能区分 CPU 内部地址和外部地址。
: 你说的 CPU 对地址线的操作,就是内部地址,
: 经过 paging 以后翻译到物理地址。
: 物理地址最后在芯片外部是要访问外部地址。
: 外部地址就是芯片借口,包括 EEPROM 和 RAM
: 这些。这个外部地址可以是 I2C, 也可以是ram bus。
: 也可以是 SPI。要看这个 CPU 外设支持什么。
: 你不如就 beagleboard 这个例子展开说一下
: 这个启动过程是如何用软件加载 I2C loading
: code 的吧,如果 I2C 仅仅是硬盘外设备。
x*u
77 楼
你们手机班分不清bootrom和bootimage。。。
【在 S*A 的大作中提到】
: 你无论如何绕,绕不过去 beagleboard 的 bootrom 就是 I2C 里。
: http://elinux.org/BeagleBoardPinMux
: 没有其他 ARM 上的 flash。
【在 S*A 的大作中提到】
: 你无论如何绕,绕不过去 beagleboard 的 bootrom 就是 I2C 里。
: http://elinux.org/BeagleBoardPinMux
: 没有其他 ARM 上的 flash。
S*A
78 楼
我觉得龙猫最大的本事就是可以指着一头鹿,
然后和大家辩论这是一只马。最无耻也是
这样的辩论。
beagleboard 的 bootrom 就是放 I2C 里面。
你扯上 手机班, bootimage 又如何呢?
改变不了这个 ARM 就是从 I2C EEPROM 里面
boot 起来的。这个是事实。你说的那些没有
可以自圆其说的。
然后和大家辩论这是一只马。最无耻也是
这样的辩论。
beagleboard 的 bootrom 就是放 I2C 里面。
你扯上 手机班, bootimage 又如何呢?
改变不了这个 ARM 就是从 I2C EEPROM 里面
boot 起来的。这个是事实。你说的那些没有
可以自圆其说的。
x*u
79 楼
ARM真不是从I2C总线启动起来的,处理器手册都在网上放着。。。您老最大问题是只上
过速成班,而计算机界名词又非常混乱,所以就错乱了。
打个比方,你把linux装在U盘里启动,然后就说奔腾CPU是直接从USB Flash memory启
动的,所以体系结构教材都胡扯。
【在 S*A 的大作中提到】
: 我觉得龙猫最大的本事就是可以指着一头鹿,
: 然后和大家辩论这是一只马。最无耻也是
: 这样的辩论。
: beagleboard 的 bootrom 就是放 I2C 里面。
: 你扯上 手机班, bootimage 又如何呢?
: 改变不了这个 ARM 就是从 I2C EEPROM 里面
: boot 起来的。这个是事实。你说的那些没有
: 可以自圆其说的。
过速成班,而计算机界名词又非常混乱,所以就错乱了。
打个比方,你把linux装在U盘里启动,然后就说奔腾CPU是直接从USB Flash memory启
动的,所以体系结构教材都胡扯。
【在 S*A 的大作中提到】
: 我觉得龙猫最大的本事就是可以指着一头鹿,
: 然后和大家辩论这是一只马。最无耻也是
: 这样的辩论。
: beagleboard 的 bootrom 就是放 I2C 里面。
: 你扯上 手机班, bootimage 又如何呢?
: 改变不了这个 ARM 就是从 I2C EEPROM 里面
: boot 起来的。这个是事实。你说的那些没有
: 可以自圆其说的。
S*A
82 楼
所以说你指鹿为马能力真不是盖的。
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启
: 动的,所以体系结构教材都胡扯。
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
83 楼
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 的大作中提到】
: 所以说你指鹿为马能力真不是盖的。
: CPU 手册在这里,我们一步一步来看。
: http://www.ti.com/lit/ds/symlink/am3715.pdf
: 这个 CPU 是不是没有 SOC 内置 EEPROM?如果有请指出来
: 手册哪一章,哪一页。
: 然后 bare 的 bagle board 是不是没有除了 I2C EEPROM 以外的
: 形式的 ROM?
: 这些基本 fact 可不可以确定?还是要再辩论一番?
S*A
84 楼
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
85 楼
第一个rom关键字啊亲。。。
【在 S*A 的大作中提到】
:
: http://www.ti.com/lit/ds/symlink/am3715.pdf
: 手册再这里。且慢,你说的 ROM 是 SOC 内部还是外部。
: 如果是内部在手册什么地方提到?
: 你说的是 ATMega 这种 8 位单片机。比较弱的 CPU。
: 这个 ARM 芯片没有。
【在 S*A 的大作中提到】
:
: http://www.ti.com/lit/ds/symlink/am3715.pdf
: 手册再这里。且慢,你说的 ROM 是 SOC 内部还是外部。
: 如果是内部在手册什么地方提到?
: 你说的是 ATMega 这种 8 位单片机。比较弱的 CPU。
: 这个 ARM 芯片没有。
s*u
86 楼
没错,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关键字啊亲。。。
固化的。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
87 楼
http://e2e.ti.com/support/omap/f/849/t/108130.aspx
那个是系统的 ROM, 不可以被用户 program 的。
所以我说 ARM 上面没有其他的 EEPROM 也是成立的。
但是我承认这个举这个例子比较不贴切,我看看能不
能给你找个好点的例子。
【在 x****u 的大作中提到】
: 第一个rom关键字啊亲。。。
那个是系统的 ROM, 不可以被用户 program 的。
所以我说 ARM 上面没有其他的 EEPROM 也是成立的。
但是我承认这个举这个例子比较不贴切,我看看能不
能给你找个好点的例子。
【在 x****u 的大作中提到】
: 第一个rom关键字啊亲。。。
b*e
88 楼
这个估计你搞错了。
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 上的。
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 上的。
x*u
93 楼
大姐你还是找本书看看吧,这些东西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就只有这么大,能做的就是初始化最基本的能与外设通讯的手段,常用的
谁告诉你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
94 楼
你根本没看懂。
内置rom当然不可以用EEPROM的工具改写,但修改内容一点问题没有,用专用工具即可
,开不开放,锁不锁死也可以用熔丝位限制。
不然加密,验证都没法做,甚至三哥程序员多打一个分号你芯片就要销毁。。。
【在 S*A 的大作中提到】
: http://e2e.ti.com/support/omap/f/849/t/108130.aspx
: 那个是系统的 ROM, 不可以被用户 program 的。
: 所以我说 ARM 上面没有其他的 EEPROM 也是成立的。
: 但是我承认这个举这个例子比较不贴切,我看看能不
: 能给你找个好点的例子。
内置rom当然不可以用EEPROM的工具改写,但修改内容一点问题没有,用专用工具即可
,开不开放,锁不锁死也可以用熔丝位限制。
不然加密,验证都没法做,甚至三哥程序员多打一个分号你芯片就要销毁。。。
【在 S*A 的大作中提到】
: http://e2e.ti.com/support/omap/f/849/t/108130.aspx
: 那个是系统的 ROM, 不可以被用户 program 的。
: 所以我说 ARM 上面没有其他的 EEPROM 也是成立的。
: 但是我承认这个举这个例子比较不贴切,我看看能不
: 能给你找个好点的例子。
x*u
95 楼
你彻底错乱了。
8位机和Linux有毛关系,我是建议你好好学学基础别被名词搞傻了。
【在 s******u 的大作中提到】
: 我想说的是,你就是揪了一些关键字和从你自己家pc上学来的一点知识,然后为了之前
: 自己吹的一些牛皮就在那边拍这个拍那个。但是真正的对于embedded system和soc你除
: 了现学现卖的从网上找来的一些资料之外,你实际懂多少?连beagle board都没听说过
: ,还有你有哪怕是编译过bootloader么?我甚至怀疑你之前压根就没听说过这个名词,
: 更不要说soc的启动序列了。也许你用过arduino,但是arduino不是embedded linux,
: 我怀疑你也根本没去关心过arduino是怎么boot的
8位机和Linux有毛关系,我是建议你好好学学基础别被名词搞傻了。
【在 s******u 的大作中提到】
: 我想说的是,你就是揪了一些关键字和从你自己家pc上学来的一点知识,然后为了之前
: 自己吹的一些牛皮就在那边拍这个拍那个。但是真正的对于embedded system和soc你除
: 了现学现卖的从网上找来的一些资料之外,你实际懂多少?连beagle board都没听说过
: ,还有你有哪怕是编译过bootloader么?我甚至怀疑你之前压根就没听说过这个名词,
: 更不要说soc的启动序列了。也许你用过arduino,但是arduino不是embedded linux,
: 我怀疑你也根本没去关心过arduino是怎么boot的
b*e
98 楼
内置的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就只有这么大,能做的就是初始化最基本的能与外设通讯的手段,常用的
比如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
99 楼
这个有好一点的例子是可以完全不用 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。
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
100 楼
没有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。
也不变。
你的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
103 楼
你这个又会错意了。
原文说的是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。
原文说的是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。
S*A
107 楼
对啊,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.
用 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
108 楼
Ar9331 内存总线是 ddr/ddr2
EEPRom 就是 SPI,很慢的那种。
这个芯片的路由器被分析很彻底了。
EEPRom 就是 SPI,很慢的那种。
这个芯片的路由器被分析很彻底了。
x*u
110 楼
两回事,你文档里面写了:
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 在你看来也是低速设备?不用内存总线。
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 在你看来也是低速设备?不用内存总线。
S*A
113 楼
你的依据是什么,我们能用 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
114 楼
看我上文的图。
这个和 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的意思。
这个和 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
119 楼
首先你说的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
另外以下这句话是错的:
用外部 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
120 楼
看来需要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 吗,实例都给你了。
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
121 楼
靠什么都是随你说得啦。
前面说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选择。
前面说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
122 楼
我就详细解释一下你到底错在哪里。
这个datasheet说的spi,和一般说的低速设备常用的i2c,spi不同,是专门为Serial
flash做的接口。SPI不是成文协议,只要有3根或者4根线类似定义的串行通信都可以这
么叫。
恰好有人做了基于mips和serial flash的Arduino方案,其中spi用的不是内存控制器的
,而是用gpio模拟。
所以教科书是没错的,专业设计不能让慢速总线拖后腿,给老师代个好吧。
【在 S*A 的大作中提到】
: 靠什么都是随你说得啦。
: 前面说SPI 都太慢不可能接直接访问。后面就硬盘都太简单可以直接硬件
: memory map。你说人家不可以直接访问 flash 启动,就算 data sheet
: 里说了可以都不算得,人家就绝对不可能用硬件实现选择电路,就你自
: 己说可能还是要一定访问 ROM 才算。
这个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
123 楼
不是很理解,你是要自己设计个板子还是用现成比较接近的就可以了?
你说得这个 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
124 楼
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模拟。
: 所以教科书是没错的,专业设计不能让慢速总线拖后腿,给老师代个好吧。
只有 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
125 楼
你也对嵌入式太无知了。
SPI是不成文标准,具体实现方式取决于主从双方的特定约定,和以太网完全没有可比
性。
你的那个芯片,也不支持map spi设备地址,这种事情硬件不可能实现。它支持的是一
种特定的双向串行的flash芯片连内存控制器,这个芯片只是无数spi应用的特例。
Serial
以这
器的
【在 S*A 的大作中提到】
: SPI 硬件时序不是成文规定?
: 只有 gpio bit banging 的才有资格叫 SPI ?
: 你开什么玩笑。
: 这个就是硬件接口口就是标准的 SPI,是低层。
: 就好像你得 ethernet 是有标准的, 不会里面
: 能传不同得 http 或者 https 就不是一个标准了。
: 这两个是不同一层。
: SPI 是相当于网络的 Link layer。
: 里面得数据流如何解释是和 serial flash 有关。
: 但是下层用得还是 SPI。
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
126 楼
所以你又放弃了白马不是马的理论了?
你是补是刚才去 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
: 以这
: 器的
你是补是刚才去 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
127 楼
我发现了你那个芯所谓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
的不都是你贴的文档么?
【在 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
128 楼
你还真有空啊
还不如出去跑跑步预防痔疮
【在 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 的大作中提到】
: 所以你又放弃了白马不是马的理论了?
: 你是补是刚才去 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
135 楼
Stm32f4 使用硬件加密 SSL
cpu 不用参与太多加密计算。
其他通用的计算就有比较大
区别了。毕竟主频差了几倍。
那个USB OTG 要处理 Hub
什么的都挺麻烦的。要整合的
代码量比较大。
现在可以跑Linux的ARM SOC
也挺便宜的。我看了,那个 $7 pogoplug
v4 的平台没有 PCI 设备,扫描 PCI
可以完全不做。做也没有多少时间。
现在的kernel 就是缺省串口打印console
浪费不少时间。去掉应该有可能不太多
其他改动就可以了。已经全部编译到
uimage 里面,没有 modprobe。
【在 W*****x 的大作中提到】
: 这个用来给SOC建立初始时钟, 激活默认的存储外设访问接口, 加载二级bootloader.
cpu 不用参与太多加密计算。
其他通用的计算就有比较大
区别了。毕竟主频差了几倍。
那个USB OTG 要处理 Hub
什么的都挺麻烦的。要整合的
代码量比较大。
现在可以跑Linux的ARM SOC
也挺便宜的。我看了,那个 $7 pogoplug
v4 的平台没有 PCI 设备,扫描 PCI
可以完全不做。做也没有多少时间。
现在的kernel 就是缺省串口打印console
浪费不少时间。去掉应该有可能不太多
其他改动就可以了。已经全部编译到
uimage 里面,没有 modprobe。
【在 W*****x 的大作中提到】
: 这个用来给SOC建立初始时钟, 激活默认的存储外设访问接口, 加载二级bootloader.
S*A
137 楼
LZ 这个要求需要明确一下,就是什么是启动以后可以用
的状态。这个设备是不是没有显示器,如果没有得话。
是不是以可以网络连接开始算用户交互使用。
的状态。这个设备是不是没有显示器,如果没有得话。
是不是以可以网络连接开始算用户交互使用。
S*A
139 楼
你的意思是说可以用串口和你的芯片交互就算
启动完毕了?
那很简单。
对就是 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?
: 是可以自己编程的吗?
启动完毕了?
那很简单。
对就是 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
140 楼
因为我最近在 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 ([email protected]) (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 (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.
你看了以下。
我从 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 ([email protected]) (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 (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
141 楼
去掉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 的大作中提到】
: 因为我最近在 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
142 楼
我的 dmesg 已经说明没有 USB root 的话,
那个 Linux 可以 2 秒钟左右启动到 systemd。
每行 dmesg 都有 time stamp, 非常精确。
还有一个要注意的是 Uboot,那个 Uboot 本身
有些 boot wait 是给调式用的,最终版本如果
要尽可能快得的话要把这些也去掉。
Pogoplug 启动时间那么长,很多和这些交互调式
的有关。
那个 Linux 可以 2 秒钟左右启动到 systemd。
每行 dmesg 都有 time stamp, 非常精确。
还有一个要注意的是 Uboot,那个 Uboot 本身
有些 boot wait 是给调式用的,最终版本如果
要尽可能快得的话要把这些也去掉。
Pogoplug 启动时间那么长,很多和这些交互调式
的有关。
b*i
143 楼
看来这个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
以前做过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
144 楼
这个 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,因为可以特制串口硬件在芯片
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
145 楼
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 的大作中提到】
: 这个 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
146 楼
对了,你买 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
147 楼
目的是嵌入式系统,比如ARM 600MHz,512M内存,SD card,USB,ethernet等都是固定
的硬件,比如像苹果手机那样。
那么,能做到启动Linux使用2秒钟以内吗?
的硬件,比如像苹果手机那样。
那么,能做到启动Linux使用2秒钟以内吗?
s*u
148 楼
加电到进入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秒左右
吧
上电-->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
149 楼
S*A
153 楼
可以hibernate. 但是不可能2 秒钟。
因为读入状态文件要先初始化硬盘和驱动。
2 秒sleep 可以。有distro 这么干过。
因为读入状态文件要先初始化硬盘和驱动。
2 秒sleep 可以。有distro 这么干过。
s*u
161 楼
看小电影跟这个倒是没关系,内部存储和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要是就这点速度,看个小电影都做不到。
不过我承认确实是低估了,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
162 楼
现在的芯片都是内置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.
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
163 楼
感叹一下,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.
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*A
181 楼
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烧上逻辑和这边通信?
能够跑 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
182 楼
我当时理解错了,说的是 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 里,这样才最快最省
其实 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 里,这样才最快最省
s*u
185 楼
扯了一大圈好像没人在回答楼主最早的问题了,呵呵
你的是基于什么开发板的么?如果是的话找个对应的device tree,还有那些device对
应的module什么的,编译一个kernel出来应该还不太麻烦。如果是完全自己设计的板子
那相对麻烦多了,不过要能自己设计开发板,搞定个kernel build应该不是问题吧
可以去看看yocto
https://www.yoctoproject.org/
【在 b***i 的大作中提到】
: 目的是嵌入式系统,比如ARM 600MHz,512M内存,SD card,USB,ethernet等都是固定
: 的硬件,比如像苹果手机那样。
: 那么,能做到启动Linux使用2秒钟以内吗?
你的是基于什么开发板的么?如果是的话找个对应的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
186 楼
我说那个看 dmesg 的应该是相关的吧。把 time stamp 打开。
看看启动引导的时候时间都花在什么模块上了。
基本上, CPU 是很快的。慢的是外设。你要用的外设越多,
越容易慢。找到最慢的部分看看如何能简化。
【在 s******u 的大作中提到】
: 扯了一大圈好像没人在回答楼主最早的问题了,呵呵
: 你的是基于什么开发板的么?如果是的话找个对应的device tree,还有那些device对
: 应的module什么的,编译一个kernel出来应该还不太麻烦。如果是完全自己设计的板子
: 那相对麻烦多了,不过要能自己设计开发板,搞定个kernel build应该不是问题吧
: 可以去看看yocto
: https://www.yoctoproject.org/
看看启动引导的时候时间都花在什么模块上了。
基本上, CPU 是很快的。慢的是外设。你要用的外设越多,
越容易慢。找到最慢的部分看看如何能简化。
【在 s******u 的大作中提到】
: 扯了一大圈好像没人在回答楼主最早的问题了,呵呵
: 你的是基于什么开发板的么?如果是的话找个对应的device tree,还有那些device对
: 应的module什么的,编译一个kernel出来应该还不太麻烦。如果是完全自己设计的板子
: 那相对麻烦多了,不过要能自己设计开发板,搞定个kernel build应该不是问题吧
: 可以去看看yocto
: https://www.yoctoproject.org/
b*i
187 楼
一个方案是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/
另一个是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
188 楼
人楼主问的就是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方便些。
有啥好争的?
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方便些。
S*A
190 楼
你可以先把不需要的模块 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
191 楼
我就知道这帖子能把民科都引过来。
外置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 就比
外置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
192 楼
就说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 就比
一般说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
193 楼
嵌入 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上,大师你在说什么啊。。。
你没有概念就不要出来显了。
给个常见的 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
194 楼
所以说你缺乏根本概念。
虽然存储设备差不多,但对于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 上的。
虽然存储设备差不多,但对于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
201 楼
傻冒了吧, 这个特定地址,在 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,你说的这个只是外存
: 而已。
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
202 楼
这就是对体系结构无知才有的想法。
"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 的。
: 你如何绕也是绕不过的。
"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
203 楼
是你自己不能区分 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年前要用硬盘模拟内存的也是你吧。
你说的 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
204 楼
你无论如何绕,绕不过去 beagleboard 的 bootrom 就是 I2C 里。
http://elinux.org/BeagleBoardPinMux
没有其他 ARM 上的 flash。
【在 x****u 的大作中提到】
: 这就是对体系结构无知才有的想法。
: "CPU翻译地址访问"...你知不知道CPU是高速设备,不考虑cache只能访问地址总线,这
: 尼玛里面的设备和步骤多了去了,一个I2C是转了N层才挂上的。
: 直接接不是行为艺术是什么。
http://elinux.org/BeagleBoardPinMux
没有其他 ARM 上的 flash。
【在 x****u 的大作中提到】
: 这就是对体系结构无知才有的想法。
: "CPU翻译地址访问"...你知不知道CPU是高速设备,不考虑cache只能访问地址总线,这
: 尼玛里面的设备和步骤多了去了,一个I2C是转了N层才挂上的。
: 直接接不是行为艺术是什么。
x*u
205 楼
我倒,你藏拙吧。
这点事情和MMU以及paging毛关系也没有,这两个是纯软件层概念,x86都是启动后软件
开关。
【在 S*A 的大作中提到】
: 是你自己不能区分 CPU 内部地址和外部地址。
: 你说的 CPU 对地址线的操作,就是内部地址,
: 经过 paging 以后翻译到物理地址。
: 物理地址最后在芯片外部是要访问外部地址。
: 外部地址就是芯片借口,包括 EEPROM 和 RAM
: 这些。这个外部地址可以是 I2C, 也可以是ram bus。
: 也可以是 SPI。要看这个 CPU 外设支持什么。
: 你不如就 beagleboard 这个例子展开说一下
: 这个启动过程是如何用软件加载 I2C loading
: code 的吧,如果 I2C 仅仅是硬盘外设备。
这点事情和MMU以及paging毛关系也没有,这两个是纯软件层概念,x86都是启动后软件
开关。
【在 S*A 的大作中提到】
: 是你自己不能区分 CPU 内部地址和外部地址。
: 你说的 CPU 对地址线的操作,就是内部地址,
: 经过 paging 以后翻译到物理地址。
: 物理地址最后在芯片外部是要访问外部地址。
: 外部地址就是芯片借口,包括 EEPROM 和 RAM
: 这些。这个外部地址可以是 I2C, 也可以是ram bus。
: 也可以是 SPI。要看这个 CPU 外设支持什么。
: 你不如就 beagleboard 这个例子展开说一下
: 这个启动过程是如何用软件加载 I2C loading
: code 的吧,如果 I2C 仅仅是硬盘外设备。
x*u
206 楼
你们手机班分不清bootrom和bootimage。。。
【在 S*A 的大作中提到】
: 你无论如何绕,绕不过去 beagleboard 的 bootrom 就是 I2C 里。
: http://elinux.org/BeagleBoardPinMux
: 没有其他 ARM 上的 flash。
【在 S*A 的大作中提到】
: 你无论如何绕,绕不过去 beagleboard 的 bootrom 就是 I2C 里。
: http://elinux.org/BeagleBoardPinMux
: 没有其他 ARM 上的 flash。
S*A
207 楼
我觉得龙猫最大的本事就是可以指着一头鹿,
然后和大家辩论这是一只马。最无耻也是
这样的辩论。
beagleboard 的 bootrom 就是放 I2C 里面。
你扯上 手机班, bootimage 又如何呢?
改变不了这个 ARM 就是从 I2C EEPROM 里面
boot 起来的。这个是事实。你说的那些没有
可以自圆其说的。
然后和大家辩论这是一只马。最无耻也是
这样的辩论。
beagleboard 的 bootrom 就是放 I2C 里面。
你扯上 手机班, bootimage 又如何呢?
改变不了这个 ARM 就是从 I2C EEPROM 里面
boot 起来的。这个是事实。你说的那些没有
可以自圆其说的。
x*u
208 楼
ARM真不是从I2C总线启动起来的,处理器手册都在网上放着。。。您老最大问题是只上
过速成班,而计算机界名词又非常混乱,所以就错乱了。
打个比方,你把linux装在U盘里启动,然后就说奔腾CPU是直接从USB Flash memory启
动的,所以体系结构教材都胡扯。
【在 S*A 的大作中提到】
: 我觉得龙猫最大的本事就是可以指着一头鹿,
: 然后和大家辩论这是一只马。最无耻也是
: 这样的辩论。
: beagleboard 的 bootrom 就是放 I2C 里面。
: 你扯上 手机班, bootimage 又如何呢?
: 改变不了这个 ARM 就是从 I2C EEPROM 里面
: boot 起来的。这个是事实。你说的那些没有
: 可以自圆其说的。
过速成班,而计算机界名词又非常混乱,所以就错乱了。
打个比方,你把linux装在U盘里启动,然后就说奔腾CPU是直接从USB Flash memory启
动的,所以体系结构教材都胡扯。
【在 S*A 的大作中提到】
: 我觉得龙猫最大的本事就是可以指着一头鹿,
: 然后和大家辩论这是一只马。最无耻也是
: 这样的辩论。
: beagleboard 的 bootrom 就是放 I2C 里面。
: 你扯上 手机班, bootimage 又如何呢?
: 改变不了这个 ARM 就是从 I2C EEPROM 里面
: boot 起来的。这个是事实。你说的那些没有
: 可以自圆其说的。
S*A
211 楼
所以说你指鹿为马能力真不是盖的。
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启
: 动的,所以体系结构教材都胡扯。
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
212 楼
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 的大作中提到】
: 所以说你指鹿为马能力真不是盖的。
: CPU 手册在这里,我们一步一步来看。
: http://www.ti.com/lit/ds/symlink/am3715.pdf
: 这个 CPU 是不是没有 SOC 内置 EEPROM?如果有请指出来
: 手册哪一章,哪一页。
: 然后 bare 的 bagle board 是不是没有除了 I2C EEPROM 以外的
: 形式的 ROM?
: 这些基本 fact 可不可以确定?还是要再辩论一番?
S*A
213 楼
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
214 楼
第一个rom关键字啊亲。。。
【在 S*A 的大作中提到】
:
: http://www.ti.com/lit/ds/symlink/am3715.pdf
: 手册再这里。且慢,你说的 ROM 是 SOC 内部还是外部。
: 如果是内部在手册什么地方提到?
: 你说的是 ATMega 这种 8 位单片机。比较弱的 CPU。
: 这个 ARM 芯片没有。
【在 S*A 的大作中提到】
:
: http://www.ti.com/lit/ds/symlink/am3715.pdf
: 手册再这里。且慢,你说的 ROM 是 SOC 内部还是外部。
: 如果是内部在手册什么地方提到?
: 你说的是 ATMega 这种 8 位单片机。比较弱的 CPU。
: 这个 ARM 芯片没有。
s*u
215 楼
没错,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关键字啊亲。。。
固化的。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
216 楼
http://e2e.ti.com/support/omap/f/849/t/108130.aspx
那个是系统的 ROM, 不可以被用户 program 的。
所以我说 ARM 上面没有其他的 EEPROM 也是成立的。
但是我承认这个举这个例子比较不贴切,我看看能不
能给你找个好点的例子。
【在 x****u 的大作中提到】
: 第一个rom关键字啊亲。。。
那个是系统的 ROM, 不可以被用户 program 的。
所以我说 ARM 上面没有其他的 EEPROM 也是成立的。
但是我承认这个举这个例子比较不贴切,我看看能不
能给你找个好点的例子。
【在 x****u 的大作中提到】
: 第一个rom关键字啊亲。。。
b*e
217 楼
这个估计你搞错了。
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 上的。
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 上的。
x*u
222 楼
大姐你还是找本书看看吧,这些东西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就只有这么大,能做的就是初始化最基本的能与外设通讯的手段,常用的
谁告诉你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
223 楼
你根本没看懂。
内置rom当然不可以用EEPROM的工具改写,但修改内容一点问题没有,用专用工具即可
,开不开放,锁不锁死也可以用熔丝位限制。
不然加密,验证都没法做,甚至三哥程序员多打一个分号你芯片就要销毁。。。
【在 S*A 的大作中提到】
: http://e2e.ti.com/support/omap/f/849/t/108130.aspx
: 那个是系统的 ROM, 不可以被用户 program 的。
: 所以我说 ARM 上面没有其他的 EEPROM 也是成立的。
: 但是我承认这个举这个例子比较不贴切,我看看能不
: 能给你找个好点的例子。
内置rom当然不可以用EEPROM的工具改写,但修改内容一点问题没有,用专用工具即可
,开不开放,锁不锁死也可以用熔丝位限制。
不然加密,验证都没法做,甚至三哥程序员多打一个分号你芯片就要销毁。。。
【在 S*A 的大作中提到】
: http://e2e.ti.com/support/omap/f/849/t/108130.aspx
: 那个是系统的 ROM, 不可以被用户 program 的。
: 所以我说 ARM 上面没有其他的 EEPROM 也是成立的。
: 但是我承认这个举这个例子比较不贴切,我看看能不
: 能给你找个好点的例子。
x*u
224 楼
你彻底错乱了。
8位机和Linux有毛关系,我是建议你好好学学基础别被名词搞傻了。
【在 s******u 的大作中提到】
: 我想说的是,你就是揪了一些关键字和从你自己家pc上学来的一点知识,然后为了之前
: 自己吹的一些牛皮就在那边拍这个拍那个。但是真正的对于embedded system和soc你除
: 了现学现卖的从网上找来的一些资料之外,你实际懂多少?连beagle board都没听说过
: ,还有你有哪怕是编译过bootloader么?我甚至怀疑你之前压根就没听说过这个名词,
: 更不要说soc的启动序列了。也许你用过arduino,但是arduino不是embedded linux,
: 我怀疑你也根本没去关心过arduino是怎么boot的
8位机和Linux有毛关系,我是建议你好好学学基础别被名词搞傻了。
【在 s******u 的大作中提到】
: 我想说的是,你就是揪了一些关键字和从你自己家pc上学来的一点知识,然后为了之前
: 自己吹的一些牛皮就在那边拍这个拍那个。但是真正的对于embedded system和soc你除
: 了现学现卖的从网上找来的一些资料之外,你实际懂多少?连beagle board都没听说过
: ,还有你有哪怕是编译过bootloader么?我甚至怀疑你之前压根就没听说过这个名词,
: 更不要说soc的启动序列了。也许你用过arduino,但是arduino不是embedded linux,
: 我怀疑你也根本没去关心过arduino是怎么boot的
b*e
227 楼
内置的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就只有这么大,能做的就是初始化最基本的能与外设通讯的手段,常用的
比如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
228 楼
这个有好一点的例子是可以完全不用 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。
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
229 楼
没有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。
也不变。
你的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
232 楼
你这个又会错意了。
原文说的是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。
原文说的是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。
S*A
236 楼
对啊,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.
用 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
237 楼
Ar9331 内存总线是 ddr/ddr2
EEPRom 就是 SPI,很慢的那种。
这个芯片的路由器被分析很彻底了。
EEPRom 就是 SPI,很慢的那种。
这个芯片的路由器被分析很彻底了。
x*u
239 楼
两回事,你文档里面写了:
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 在你看来也是低速设备?不用内存总线。
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 在你看来也是低速设备?不用内存总线。
S*A
242 楼
你的依据是什么,我们能用 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
243 楼
看我上文的图。
这个和 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的意思。
这个和 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
248 楼
首先你说的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
另外以下这句话是错的:
用外部 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
249 楼
看来需要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 吗,实例都给你了。
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
250 楼
靠什么都是随你说得啦。
前面说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选择。
前面说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
251 楼
我就详细解释一下你到底错在哪里。
这个datasheet说的spi,和一般说的低速设备常用的i2c,spi不同,是专门为Serial
flash做的接口。SPI不是成文协议,只要有3根或者4根线类似定义的串行通信都可以这
么叫。
恰好有人做了基于mips和serial flash的Arduino方案,其中spi用的不是内存控制器的
,而是用gpio模拟。
所以教科书是没错的,专业设计不能让慢速总线拖后腿,给老师代个好吧。
【在 S*A 的大作中提到】
: 靠什么都是随你说得啦。
: 前面说SPI 都太慢不可能接直接访问。后面就硬盘都太简单可以直接硬件
: memory map。你说人家不可以直接访问 flash 启动,就算 data sheet
: 里说了可以都不算得,人家就绝对不可能用硬件实现选择电路,就你自
: 己说可能还是要一定访问 ROM 才算。
这个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
252 楼
不是很理解,你是要自己设计个板子还是用现成比较接近的就可以了?
你说得这个 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
253 楼
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模拟。
: 所以教科书是没错的,专业设计不能让慢速总线拖后腿,给老师代个好吧。
只有 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
254 楼
你也对嵌入式太无知了。
SPI是不成文标准,具体实现方式取决于主从双方的特定约定,和以太网完全没有可比
性。
你的那个芯片,也不支持map spi设备地址,这种事情硬件不可能实现。它支持的是一
种特定的双向串行的flash芯片连内存控制器,这个芯片只是无数spi应用的特例。
Serial
以这
器的
【在 S*A 的大作中提到】
: SPI 硬件时序不是成文规定?
: 只有 gpio bit banging 的才有资格叫 SPI ?
: 你开什么玩笑。
: 这个就是硬件接口口就是标准的 SPI,是低层。
: 就好像你得 ethernet 是有标准的, 不会里面
: 能传不同得 http 或者 https 就不是一个标准了。
: 这两个是不同一层。
: SPI 是相当于网络的 Link layer。
: 里面得数据流如何解释是和 serial flash 有关。
: 但是下层用得还是 SPI。
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
255 楼
所以你又放弃了白马不是马的理论了?
你是补是刚才去 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
: 以这
: 器的
你是补是刚才去 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
256 楼
我发现了你那个芯所谓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
的不都是你贴的文档么?
【在 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
257 楼
你还真有空啊
还不如出去跑跑步预防痔疮
【在 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 的大作中提到】
: 所以你又放弃了白马不是马的理论了?
: 你是补是刚才去 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
264 楼
Stm32f4 使用硬件加密 SSL
cpu 不用参与太多加密计算。
其他通用的计算就有比较大
区别了。毕竟主频差了几倍。
那个USB OTG 要处理 Hub
什么的都挺麻烦的。要整合的
代码量比较大。
现在可以跑Linux的ARM SOC
也挺便宜的。我看了,那个 $7 pogoplug
v4 的平台没有 PCI 设备,扫描 PCI
可以完全不做。做也没有多少时间。
现在的kernel 就是缺省串口打印console
浪费不少时间。去掉应该有可能不太多
其他改动就可以了。已经全部编译到
uimage 里面,没有 modprobe。
【在 W*****x 的大作中提到】
: 这个用来给SOC建立初始时钟, 激活默认的存储外设访问接口, 加载二级bootloader.
cpu 不用参与太多加密计算。
其他通用的计算就有比较大
区别了。毕竟主频差了几倍。
那个USB OTG 要处理 Hub
什么的都挺麻烦的。要整合的
代码量比较大。
现在可以跑Linux的ARM SOC
也挺便宜的。我看了,那个 $7 pogoplug
v4 的平台没有 PCI 设备,扫描 PCI
可以完全不做。做也没有多少时间。
现在的kernel 就是缺省串口打印console
浪费不少时间。去掉应该有可能不太多
其他改动就可以了。已经全部编译到
uimage 里面,没有 modprobe。
【在 W*****x 的大作中提到】
: 这个用来给SOC建立初始时钟, 激活默认的存储外设访问接口, 加载二级bootloader.
S*A
266 楼
LZ 这个要求需要明确一下,就是什么是启动以后可以用
的状态。这个设备是不是没有显示器,如果没有得话。
是不是以可以网络连接开始算用户交互使用。
的状态。这个设备是不是没有显示器,如果没有得话。
是不是以可以网络连接开始算用户交互使用。
S*A
268 楼
你的意思是说可以用串口和你的芯片交互就算
启动完毕了?
那很简单。
对就是 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?
: 是可以自己编程的吗?
启动完毕了?
那很简单。
对就是 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
269 楼
因为我最近在 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 ([email protected]) (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 (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.
你看了以下。
我从 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 ([email protected]) (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 (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
270 楼
去掉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 的大作中提到】
: 因为我最近在 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
271 楼
我的 dmesg 已经说明没有 USB root 的话,
那个 Linux 可以 2 秒钟左右启动到 systemd。
每行 dmesg 都有 time stamp, 非常精确。
还有一个要注意的是 Uboot,那个 Uboot 本身
有些 boot wait 是给调式用的,最终版本如果
要尽可能快得的话要把这些也去掉。
Pogoplug 启动时间那么长,很多和这些交互调式
的有关。
那个 Linux 可以 2 秒钟左右启动到 systemd。
每行 dmesg 都有 time stamp, 非常精确。
还有一个要注意的是 Uboot,那个 Uboot 本身
有些 boot wait 是给调式用的,最终版本如果
要尽可能快得的话要把这些也去掉。
Pogoplug 启动时间那么长,很多和这些交互调式
的有关。
b*i
272 楼
看来这个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
以前做过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
273 楼
这个 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,因为可以特制串口硬件在芯片
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
274 楼
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 的大作中提到】
: 这个 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
275 楼
对了,你买 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
276 楼
新的信息
大神帮看看那里可以提高?
[ 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 上面,这些都可以启动的时候不做。
大神帮看看那里可以提高?
[ 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 上面,这些都可以启动的时候不做。
相关阅读
写程序,想算法的时候总是对第一感觉没有信任或者安全感是怎么回事?现在的windows 计算机是不是都是64位了?码工如果只认准一种语言, 要想一辈子有工作保障是不可能最近好像scala很火啊hive一问win8.1 Daylight saving 没自动Vert.x在招人现在iOS的内存管理是怎么样的?haskell怎么样 未来有机会在公司大展身手么好东西传送门周报汇总 2015-03-08问一道(大)数据 algorithm (转载)C 语言,2进制转16进制,输入问题The 7 Most Data-Rich Companies in the World各个语言在paradigms上的对比sbt错误:object xxx is not a member of package yyy现在082KAFKA支持produce数组吗有没有好的node web socket框架?吐槽Office365大家来算算数学吧vert.x v3的sneaky-peak