1.Starlink星鏈(Starlink)計劃的設計理念,是通過約4000 枚相互鏈接的衛星和依據地理分佈的地面基站,構築一個覆蓋全球的廉價太空通信系統。
Starlink 採用的是國際電聯規定的Ku、Ka頻率,5G的頻率是500MHz,衛星通信Ku波段加起來有1GHz。
一個衛星相當於很多基站,Starlink採用的是高通量技術,高通量衛星可以從一顆衛星上發射幾十個覆蓋波束,每個覆蓋一小片,就像移動蜂窩似的,這樣不同小區的頻率就可以復用了,又提升幾十倍的容量。
傳統的衛星所有的終端最終都要落在地面站,通過地面站連入互聯網。如果按照這個估算,這4000個衛星想要跑起來至少得4000個地面站。但是如果未來衛星的網絡足夠大,就沒有那麼多需要落地的信息了——全部由星間鏈路完成了。也就是,你通信的對端和你都是直連衛星的了。
感覺很多人對偏遠地區定義有所誤解,信號走Starlink的衛星會多出一段上下行延遲,額外路程就按340km軌道高度的兩倍算,走地面光纜的速度大概是真空光通訊的2/3,也就是說即使是平原直線,信號源1400km之外理論上都是Starlink佔優勢。在北京上杭州,深圳,香港的網站都算是訪問偏遠地區,Starlink比起地面網絡延遲更短更佔優勢。
其次,地面光纜在復雜地形上的佈線成本是極其昂貴的,並不是什麼地方都又平整人口又多。被複雜地形隔開的兩個人口密集區,要快速數據通信怎麼辦?跨越青藏高原和喜馬拉雅山幾百公里無人區上建設起來的的成都-拉薩-日喀則-乃維拉-勒克瑙-新德里中印光纜,現在是將來也注定是建設維護成本極其昂貴的。在此之前要從斯里蘭卡-新加坡-香港的海底光纜中轉,繞的圈子和帶寬限制更不用說了。但是Starlink成型以後,新德里和成都的直接通訊一點額外成本都沒有。
Starlink 官網:
https://www.starlink.com/
2.固件拆解Starlink 用戶終端(UT) 的暱稱是Dishy McFlatface,安裝測試了一下Starlink 用戶終端,發現下載速度高達268 Mbps,上傳速度高達49 Mbps,速度還是不錯的。
拆解Starlink 用戶終端,我們主要關心SoC和固件文件,取下塑料蓋後,可以看到覆蓋在PCB上的金屬屏蔽層,有一個以太網連接口,還有一個4針的JST SH。
通過USB轉TTL轉換器將UT連接上,可以看到一些UT的啟動信息,UT使用T-Boot引導加載程序,輸入falcon後會中斷引導過程,可以訪問U-Boot CLI。
U-Boot2020.04-gddb7afb(Apr162021-21:10:45+0000)
Model:Catson
DRAM:1004MiB
MMC:Fastboot:eMMC:8xbit-div2
stm-sdhci0:0
In:nulldev
Out:serial
Err:serial
CPUID:0x000201000x870824250xb9ca4b91
DetectedBoardrev:#rev2_proto2
sdhci_set_clock:Timeouttowaitcmddatainhibit
FIP1:3FIP2:3
BOOTSLOTB
Net:NetInitializationSkipped
Noethernetfound.
*
+
++
++
++
+++++++
++++
++++
+++
+++
+++
++++
++++
++++++++++
Board:SPACEXCATSONUTERM
======================================
=Type'falcon'tostopbootprocess=
======================================繼續執行引導過程,U-Boot會通過存儲在eMMC上的ulmage FIT鏡像文件加載內核、ramdisk、FDT。會檢查內核、ramdisk、FDT的完整性(SHA256)和真實性(RSA 2048)。
UT從ROM引導加載程序到引導Linux系統初始化都實現了完整的可信引導鏈(TF-A)。
switchtopartitions#0,OK
mmc0(part0)iscurrentdevice
MMCread:dev#0,block#98304,count49152.49152blocksread:OK
##LoadingkernelfromFITImageata2000000.
Using'rev2_proto2@1'configuration
VerifyingHashIntegrity.sha256,rsa2048:dev+OK
Trying'kernel@1'kernelsubimage
Description:compressedkernel
Created:2021-04-1621:10:45UTC
Type:KernelImage
Compression:lzmacompressed
DataStart:0xa20000dc
DataSize:3520634Bytes=3.4MiB
Architecture:AArch64
OS:Linux
LoadAddress:0x80080000
LoadSize:unavailable
EntryPoint:0x80080000
Hashalgo:sha256
Hashvalue:5efc55925a69298638157156bf118357e01435c9f9299743954af25a2638adc2
VerifyingHashIntegrity.sha256+OK
##LoadingramdiskfromFITImageata2000000.
Using'rev2_proto2@1'configuration
VerifyingHashIntegrity.sha256,rsa2048:dev+OK
Trying'ramdisk@1'ramdisksubimage
Description:compressedramdisk
Created:2021-04-1621:10:45UTC
Type:RAMDiskImage
Compression:lzmacompressed
DataStart:0xa2427f38
DataSize:8093203Bytes=7.7MiB
Architecture:AArch64
OS:Linux
LoadAddress:0xb0000000
LoadSize:unavailable
EntryPoint:0xb0000000
Hashalgo:sha256
Hashvalue:57020a8dbff20b861a4623cd73ac881e852d257b7dda3fc29ea8d795fac722aa
VerifyingHashIntegrity.sha256+OK
Loadingramdiskfrom0xa2427f38to0xb0000000
WARNING:'compression'nodesforramdisksaredeprecated,pleasefixyour.itsfile!
##LoadingfdtfromFITImageata2000000.
Using'rev2_proto2@1'configuration
VerifyingHashIntegrity.sha256,rsa2048:dev+OK
Trying'rev2_proto2_fdt@1'fdtsubimage
Description:rev2proto2devicetree
Created:2021-04-1621:10:45UTC
Type:FlatDeviceTree
Compression:uncompressed
DataStart:0xa23fc674
DataSize:59720Bytes=58.3KiB
Architecture:AArch64
LoadAddress:0x8f000000
Hashalgo:sha256
Hashvalue:cca3af2e3bbaa1ef915d474eb9034a770b01d780ace925c6e82efa579334dea8
VerifyingHashIntegrity.sha256+OK
Loadingfdtfrom0xa23fc674to0x8f000000
Bootingusingthefdtblobat0x8f000000
UncompressingKernelImage
LoadingRamdiskto8f848000,end8ffffe13.OK
ERROR:reservingfdtmemoryregionfailed(addr=b0000000size=10000000)
LoadingDeviceTreeto000000008f836000,end000000008f847947.OK
WARNING:ethactisnotset.Notincludingethprimein/chosen.
Startingkernel.可以看到內核命令參數、分區基地址、分區長度,還可以看到SoC包含4個CPU內核。
[0.000000]000:DetectedVIPTI-cacheonCPU0
[0.000000]000:Built1zonelists,mobilitygroupingon.Totalpages:193536
[0.000000]000:Kernelcommandline:rdinit=/usr/sbin/sxruntime_startmtdoops.mtddev=mtdoopsconsole=ttyAS0,115200quietalloc_snapshottrace_buf_size=5Mrcutree.kthread_prio=80earlycon=stasc,mmio32,0x8850000,115200n8uio_pdrv_genirq.of_id=generic-uioaud it=1SXRUNTIME_EXPECT_SUCCESS=trueblkdevparts=mmcblk0:0x00100000@0x00000000(BOOTFIP_0),0x00100000@0x00100000(BOOTFIP_1),0x00100000@0x00200000(BOOTFIP_2),0x00100000@0x00300000(BOOTFIP_3),0x00080000@0x00400000(BOOTTERM1),0x00080000@0x00500000(BOOTTE RM2),0x00100000@0x00600000(BOOT_A_0),0x00100000@0x00700000(BOOT_B_0),0x00100000@0x00800000(BOOT_A_1),0x00100000@0x00900000(BO OT_B_1),0x00100000@0x00A00000(UBOOT_TERM1),0x00100000@0x00B00000(UBOOT_TERM2),0x00050000@0x00FB0000(SXID),0x01800000@0x010000 00(KERNEL_A),0x00800000@0x02800000(CONFIG_A),0x01800000@0x03000000(KERNEL_B),0x00800000@0x04800000(CONFIG_B),0x01800000@0x050 00000(SX_A),0x01800000@0x06800000(SX_B),0x00020000@0x00F30000(VERSION_INFO_A),0x00020000@0x00F50000(VERSION_INFO_B),0x00020000
[0.000000]000:audit:enabled(afterinitialization)
[0.000000]000:Dentrycachehashtableentries:131072(order:9,2097152bytes,linear)
[0.000000]000:Inode-cachehashtableentries:65536(order:7,524288bytes,linear)
[0.000000]000:memauto-init:stack:off,heapalloc:off,heapfree:off
[0.000000]000:Memory:746884K/786432Kavailable(6718Kkernelcode,854Krwdata,1648Krodata,704Kinit,329Kbss,39548Kreserved,0Kcma-reserved)
[0.000000]000:SLUB:HWalign=64,Order=0-3,MinObjects=0,CPUs=4,Nodes=1
[0.000000]000:ftrace:allocating23664entriesin93pages
[0.000000]000:rcu:PreemptiblehierarchicalRCUimplementation.
[0.000000]000:rcu:RCUeventtracingisenabled.
[0.000000]000:rcu:RCUrestrictingCPUsfromNR_CPUS=8tonr_cpu_ids=4.
[0.000000]000:rcu:RCUpriorityboosting:priority80delay500ms.
[0.000000]000:rcu:RCU_SOFTIRQprocessingmovedtorcuckthreads.
[0.000000]000:Noexpeditedgraceperiod(rcu_normal_after_boot).
[0.000000]000:TasksRCUenabled.
[0.000000]000:rcu:RCUcalculatedvalueofscheduler-enlistmentdelayis100jiffies.
[0.000000]000:rcu:Adjustinggeometryforrcu_fanout_leaf=16,nr_cpu_ids=4
[0.000000]000:NR_IRQS:64,nr_irqs:64,preallocatedirqs:0
[0.000000]000:random:get_random_bytescalledfromstart_kernel+0x33c/0x4b0withcrng_init=0
[0.000000]000:arch_timer:cp15timer(s)runningat60.00MHz(virt).
[0.000000]000:clocksource:arch_sys_counter:mask:0xffffffffffffffmax_cycles:0x1bacf917bf,max_idle_ns:881590412290ns
[0.000000]000:sched_clock:56bitsat60MHz,resolution16ns,wrapsevery4398046511098ns
[0.008552]000:Calibratingdelayloop(skipped),valuecalculatedusingtimerfrequency.
[0.016871]000:120.00BogoMIPS(lpj=60000)
[0.021129]000:pid_max:default:32768minimum:301
[0.026307]000:Mount-cachehashtableentries:2048(order:2,16384bytes,linear)
[0.034005]000:Mountpoint-cachehashtableentries:2048(order:2,16384bytes,linear)
[0.048359]000:ASIDallocatorinitialisedwith32768entries
[0.050341]000:rcu:HierarchicalSRCUimplementation.
[0.061390]000:smp:BringingupsecondaryCPUs.
[0.078677]001:DetectedVIPTI-cacheonCPU1
[0.078755]001:CPU1:Bootedsecondaryprocessor0x0000000001[0x410fd034]
[0.095799]002:DetectedVIPTI-cacheonCPU2
[0.095858]002:CPU2:Bootedsecondaryprocessor0x0000000002[0x410fd034]
[0.112970]003:DetectedVIPTI-cacheonCPU3
[0.11