Unhandled fault: alignment exception

本文详细记录了在移植Linux-3.0.8内核时遇到的对齐异常错误,通过对比不同版本的交叉编译工具,发现该问题是由于编译器版本引起。文章提供了有效的解决方案,即在编译时添加-mno-unaligned-access选项,以确保内核正常运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 在移植linux-3.0.8时,报了这个错,详细信息如下:
    <1>Unhandled fault: alignment exception (0x801) at 0xc0527f27
    <0>Internal error: : 801 [#1] PREEMPT
    <d>Modules linked in:
    CPU: 0    Not tainted  (3.0.8 #33)
    PC is at pcpu_dump_alloc_info+0x38/0x230
    LR is at pcpu_setup_first_chunk+0x574/0x828
    pc : [<c03e2a34>]    lr : [<c0015bdc>]    psr: 000001d3
    sp : c0527ef8  ip : c03e2a14  fp : c0527f5c
    r10: c0529190  r9 : c0aae180  r8 : 00000001
    r7 : c0ab0000  r6 : 00008000  r5 : c0ab8080  r4 : c0aae180
    r3 : 00000001  r2 : 00000000  r1 : 2d2d2d2d  r0 : 2d2d2d2d
    Flags: nzcv  IRQs off  FIQs off  Mode SVC_32  ISA ARM  Segment kernel
    Control: 10c5387f  Table: 20004019  DAC: 00000015
>>原因分析:从报错信息看出,内核在执行pcpu_setup_first_chunk->pcpu_dump_alloc_info这个地方出问题了,经查询,这是对齐引发的异常, 而这两个函数出现在内核的mm/percpu.c中,还不能随便去掉。在使用较高版本的交叉编译工具编译较早一些的内核时,可能存在这个问题,比如我这个是使用交叉编译工具4.9.1编译内核报这个错,而使用交叉编译工具4.5.1编译却不会出现这个错,比较折中的方法就是编译时加一个选项,如下:

make EXTRA_CFLAGS=-mno-unaligned-access

经过测试,这样编译生成的内核也可以正常运行,没有出现什么异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值