Linux内核包括对arch/hexagon中高通六角数字信号处理器体系结构的支持。MAINTAINERS中列出的维护者是:
QUALCOMM HEXAGON ARCHITECTURE
M: Richard Kuo <rkuo@codeaurora.org>
L: linux-hexagon@vger.kernel.org
S: Supported
F: arch/hexagon/根据arch/hexagon/configs/comet_defconfig的说法,文件arch/hexagon/Kconfig包含一个名为"Comet“的板的defconfig。
这是什么彗星板?是谁做的?
发布于 2017-08-04 05:56:18
罗布·兰德利(他花了半年的时间在高通和quic中“花了半年时间让Linux在上面运行”)对董事会有一些看法。它是高通的内部板,有未指定的Snap巨龙和256 MB或RAM,有些联网,没有本地存储。该芯片可能与Nexus : QSD8250 (Snap巨龙S1)相同,在65 nm处制作的600 MHz上有一些QDSP6,可能是qdsp6 V2。
https://landley.net/notes-2012.html#24-02-2012
人们一直在电子邮件中问我高通公司的六边形,我一直在写很长的解释,然后就再也没有解释过了。这是我最近写的一封关于这个话题的电子邮件,给后人。已经过去一年半了,我们已经完成了一些基本的工作,故事现在就可以出来了。请记住我在2010年10月到期的工作合同,所以这些都是我一年多前的模糊回忆。他们有一个内部仿真器,这是他们外包给第三方生产的可怕的专有产品,如果我记得,高通的律师们想尽办法确保他们没有得到源代码,因为有一堆“显然好得多,该死”的东西。我希望这会在屁股上咬他们,因为这个傻瓜对Linux端口是无用的。大多数情况下我们只是使用了真正的硬件。我们有这样的东西叫做“彗星”板,它有一个蛇龙SOC和256米的内存,你可以在上面启动和运行代码。(没有本地存储,我最终实现了nbd--客户端在busybox中获取一些数据。)在qemu中添加六边形支持的尝试失败了(Scott有人这样做了,.)。不幸的是,那个尝试过的家伙无法将他的头绕在TCG周围(我认为他主要是一名经理),而且它从来没有去过任何地方。*(.就Linux而言,它是一个运行在100 get的6路SMP芯片,但是每一个周期它可以发送多达4条指令,这样你就可以接近300 get的性能……Snap巨龙系统芯片(你在Nexus中可以找到)实际上包含四个处理器: 1) ARMv7“蝎子”处理器高通获得ARM许可,然后优化(在罗利校区,他们保护自己的地盘,高通的内部政治)。2) QDSP6“蝎子”处理器qualcomm内部开发(在奥斯汀)。在android系统中,这被用作“多媒体协处理器”,但实际上它是一个功能强大的VLIW通用处理器,具有大量的矢量指令。..。对于Linux端口,在六角出现之后,我们为其他3个处理器提供了电源。我真的希望我能在我的Nexus上作为一个Android应用程序运行一个引导加载程序来在六边形上引导Linux (将uboot和kernel+initramfs块复制到内存中,启动ARMv5引导处理器来运行uboot,停止ARM),但我无法让Richard或任何人编写一个。(除非我至少有一个usb到串行适配器来给我一个串行控制台,否则这是没有用的,这是非常重要的。所有的Snap巨龙外围驱动程序都在Android树中,但都在arch/arm下面。Linutronix人所看到的最重要的事情之一就是把它们捞出来,然后把它们移到一般的体系结构中,这样六边形就可以使用它们了。不知道他们是否真的做过这件事。MMU上的一张便条:芯片实际上还没有。相反,它有一组由软件加载的翻译查找缓冲槽。他们制作了一个二进制blob,充当MMU,他们的u引导Snap龙端口(我认为是在armv5引导处理器中运行)加载这个blob并将其连接到页面故障中断,这样它就像一个软件mmu (他们的Linux端口依赖它)。六角变体在现有的Snap巨龙芯片(嗯,QDSP6v2我认为)的主要问题是,他们没有足够的TLB插槽。如果你运行完整的6路SMP做gcc编译之类的,它就会从缓存中滚出地狱,让自己慢下来。在我的测试中,性能“甜蜜点”被证明是围绕着-j3或-j4的。我不认为我们很快就发现了这一点来修复QDSP6v3 (尽管这是4级500 the的变体,它给TLB带来的压力更小,所以或多或少处于他们所拥有的最佳位置)。但是QDSP6v4 (我离开时正在开发中)增加了更多的TLB插槽,这将大大提高Linux下的性能。
http://permalink.gmane.org/gmane.linux.ports.hexagon/553只适用于v2和v3:https://www.codeaurora.org/projects/all-active-projects/hexagon-minivm:“此实现仅在六角架构v2和v3上运行。”
资料来源:https://source.codeaurora.org/quic/hmvm/hexagonMVM/tree/minivm.S
#定义TLB_ENTRIES 64 * V2/V3用户/主管策略:*用户/主管使用ASID的MSB。
QDSP6v2's参数(600 the /6线程)也是在linux源代码中硬编码的:http://elixir.free-electrons.com/linux/v4.12.3/source/arch/hexagon/kernel/setup.c#L56。
/*
* These will eventually be pulled in via either some hypervisor
* or devicetree description. Hardwiring for now.
*/
pcycle_freq_mhz = 600;
thread_freq_mhz = 100;
sleep_clk_freq = 32000;
...
* This is just really brutal and shouldn't be used anyways,
* especially on V2. Left here just in case.此外,还支持一些模拟器(不确定是否支持六边形sim)。
/*
* Simulator has a few differences from the hardware.
* For now, check uninitialized-but-mapped memory
* prior to invoking setup_arch_memory().
*/
if (*(int *)((unsigned long)_end + 8) == 0x1f1f1f1f)
on_simulator = 1;Linux代码是在2009-2010年编写的:http://elixir.free-electrons.com/linux/v4.12.3/source/arch/hexagon/lib/memcpy.S
* History
*
* DJH 5/15/09 Initial version 1.0
* DJH 6/ 1/09 Version 1.1 modified ABI to inlcude R16-R19
* DJH 7/12/09 Version 1.2 optimized codesize down to 760 was 840
* DJH 10/14/09 Version 1.3 added special loop for aligned case, was
..
* DJH 4/23/10 version 1.6https://unix.stackexchange.com/questions/246243
复制相似问题