免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234
最近访问板块 发新帖
楼主: 要有上进心

[实践] init进程出错 [复制链接]

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
发表于 2013-09-21 23:01 |显示全部楼层
本帖最后由 arm-linux-gcc 于 2013-09-22 08:25 编辑

回复 30# 要有上进心


    6410就是armv6,准确的说是arm1176jzf-s,arm11里面,1176jzf-s是最高版本的了
3.11和2.6.32.61的内核里面,s3c6400_defconfig,都有CONFIG_CPU_32v6K=y
如果6410不是armv6,那么s3c6400_defconfig里面还保留CONFIG_CPU_32v6K干什么


另外,如果没有c13,直接就会报未定义异常,而不是得到零了,甚至你编译都过不了




我查了三星6410的手册和arm官方的1176jzf-s手册,确认6410是1176,并且1176是有c13 3的

6410的手册上写明了是1176
1.2.1 S3C6410X RISC MICROPROCESSOR FEATURES SUMMARY
The features of S3C6410X RISC Microprocessor include:
• The ARM1176JZF-S based CPU subsystem with Java acceleration engine and 16KB/16KB I/D Cache and
16KB/16KB I/D TCM.

1176的手册上,也说了有c13 3
c13 0 c0 0 FCSE PID R/W, B, X R/W 0x00000000 page 3-126
             1 Context ID R/W, B R/W 0x00000000 page 3-128
             2 User Read/Write Thread and Process ID R/W, B R/W 0x00000000 page 3-129
             3 User Read-only Thread and Process ID R/W, RO, Bk R/W, RO 0x00000000 page 3-129
             4 Privileged Only Thread and Process ID R/W, B R/W 0x00000000 page 3-129

论坛徽章:
0
发表于 2013-09-21 23:54 |显示全部楼层
回复 31# arm-linux-gcc


   

s3c6410 的确是以 arm1176jzf-s为内核的。这个CPU也是有 cr13的。但是只有0-1 没有 2-4.

QQ截图20130921235505.jpg

论坛徽章:
0
发表于 2013-09-22 00:02 |显示全部楼层
本帖最后由 要有上进心 于 2013-09-22 00:03 编辑

回复 10# arm-linux-gcc


不好意思,我刚文档上找到了。

太感谢你了。我没看到那里去。


QQ截图20130922000225.jpg


   

论坛徽章:
0
发表于 2013-09-22 00:48 |显示全部楼层
本帖最后由 要有上进心 于 2013-09-22 01:15 编辑

回复 31# arm-linux-gcc


[lubo@localhost linux-2.6.32.61]$ grep -R -n 'HAS_TLS_REG' ./       
./arch/arm/kernel/traps.c:506:#if defined(CONFIG_HAS_TLS_REG)
./arch/arm/kernel/entry-armv.S:742:#if defined(CONFIG_HAS_TLS_REG)
./arch/arm/kernel/entry-armv.S:1015:#if !defined(CONFIG_HAS_TLS_REG) && !defined(CONFIG_TLS_REG_EMUL)
./arch/arm/configs/s5pc100_defconfig:227:CONFIG_HAS_TLS_REG=y
./arch/arm/configs/omap3_beagle_defconfig:238:CONFIG_HAS_TLS_REG=y
./arch/arm/configs/omap3_pandora_defconfig:235:CONFIG_HAS_TLS_REG=y
./arch/arm/configs/rx51_defconfig:237:CONFIG_HAS_TLS_REG=y
./arch/arm/configs/omap_zoom2_defconfig:246:CONFIG_HAS_TLS_REG=y
./arch/arm/configs/omap_ldp_defconfig:239:CONFIG_HAS_TLS_REG=y
./arch/arm/configs/realview-smp_defconfig:212:CONFIG_HAS_TLS_REG=y
./arch/arm/configs/omap_4430sdp_defconfig:227:CONFIG_HAS_TLS_REG=y
./arch/arm/configs/overo_defconfig:242:CONFIG_HAS_TLS_REG=y
./arch/arm/configs/omap3_evm_defconfig:245:CONFIG_HAS_TLS_REG=y
./arch/arm/configs/omap_3430sdp_defconfig:241:CONFIG_HAS_TLS_REG=y
./arch/arm/mm/Kconfig:722:config HAS_TLS_REG

我grep了一下,发现 s3c6400(configs文件夹中没有s3c6410,我就拿6400的来修改的),可能是这个出错了。我手动在.config文件里添加一下就好了。

config HAS_TLS_REG
        bool
        depends on !TLS_REG_EMUL
        default y if SMP || CPU_32v7
        help
          This selects support for the CP15 thread register.
          It is defined to be available on some ARMv6 processors (including
          all SMP capable ARMv6's) or later processors.  User space may
          assume directly accessing that register and always obtain the
          expected value only on ARMv7 and above.

我看了一下kconfig(arch/arm/mm/kconfig.722) 这个选项只有在 armv6多核处理以及 CPU32V7才被选上, 通过grep没有发现这个选项被显示(select)选择的。

我直接修改.config 和 autoconf.h发现总是在make menuconfig make后这个选择会被清除。

[lubo@localhost linux-2.6.32.61]$ make zImage
scripts/kconfig/conf -s arch/arm/Kconfig
#
# configuration written to .config
#

应该是 make menuconfig make的时候又重新生成了这几个文件。

看来我只有直接修改kconfig.我已经第二次修改内核了。第一次修改是在nand_base.c文件里面.

   

论坛徽章:
0
发表于 2013-09-22 02:06 |显示全部楼层
本帖最后由 要有上进心 于 2013-09-22 02:07 编辑

经过修改后已经进入控制台了。后面进行针对开发板的细微修改。

QQ截图20130922015935.jpg


这个问题搞了接近2个星期,怀疑了很多种情况,最初以为是编译器的问题,
然后就是在内核编译选项中添加 EABI OABI的支持。
百度(完全是废物)和google搜索了很多遍,都是添加EBAI OABI支持。
到后来怀疑是重定位,最后是在内核的__switch_to 里面看到cp15 cr13 3这个寄存器的,开始怀疑TLS的,每种情况都搞了几天。
因为没有过细擦看官方文档导致我以为s3c6410(arm1175jzf-s)没有这个寄存器。这个上面又纠结了一天。
后来还是要感谢arm-linux-gcc。让我知道了s3c6410有这个寄存器。
最后通过修改kconfig使armv6处理器 有了 CONFIG_HAS_TLS_REG这个选项。

反正官方说的是 只有部分armv6处理器有这个寄存器。我也不管了。如果以后一直到其他处理器上在修改呗。

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
发表于 2013-09-22 08:32 |显示全部楼层
回复 35# 要有上进心


哈哈,所以根本原因就是s3c6400_defconfig没有打开CONFIG_HAS_TLS_REG
后面更高版本的kernel里面都没有CONFIG_HAS_TLS_REG这个选项了,直接CPU_v6或CPU_v6K就行了

   

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
发表于 2013-09-22 08:35 |显示全部楼层
回复 34# 要有上进心

不是非要多核才会打开CONFIG_HAS_TLS_REG,你grep到的s5pc100 s5pv210 omap3都是单核的(cortex-a8)

   

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
发表于 2013-09-22 08:53 |显示全部楼层
本帖最后由 arm-linux-gcc 于 2013-09-22 09:10 编辑

回复 34# 要有上进心


以前公司也是用的arm1176jzf-s,我们当时没有选HAS_TLS_REG也能用。
估计和编译glibc时的参数有关

这东西得glibc和kernel两边一致才行,要不都是hardware(c13),要不都用software方式的




您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP