您的位置 首页 软件

ARM 内核移植中常见的过错

1.下载linux-2.6.36.1.tar.bz2问题:tar-zxvf解压压缩文件出现问题,无法识别.解决:1.通过filelinux-2.6.36.1.tar.bz2查看压缩格式2…

1.下载linux-2.6.36.1.tar.bz2
问题:tar -zxvf 解压紧缩文件呈现问题,无法辨认.
处理:1.经过file linux-2.6.36.1.tar.bz2 检查紧缩格局
2.经过指令 bzip2 -d linux-2.6.36.1.tar.bz2解压
3.再经过tar xvf linux-2.6.36.1.tar解压,不能运用
tar zxvf linux-2.6.22.6.tar解压
4.上面也能够经过一条指令bzip2 -dc linux-2.6.XX.tar.bz2 | tar xvf –
其间XX为内核紧缩包文件名

2.下载patch-2.6.36.1.bz2补丁文件
1.解压 bzip2 -d patch-2.6.36.1.bz2
2.cd linux-2.6.36.1/
3.patch -p1 < ../patch-2.6.36.1 3.先编译看下内核有没有问题,运转make指令呈现下面的过错:
问题:drivers/input/touchscreen/eeti_ts.c:65: 过错: 隐式声明函数‘irq_to_gpio’
处理:从头make menuconfig,将driver中的输入设备->接触设备中,将EETI选项不选,保存退出后,从头make.

4.将编译成功的内核zImage下载到板子中,呈现如下问题:
问题:NOW, Booting Linux……
Uncompressing Linux… done, booting the kernel.
然后没有反应….
处理:1.Device Drivers—>Character devices—>Serial drivers
下,挑选:Samsung SoC serial support
Support for console on Samsung SoC serial port
Samsung S3C2440/S3C2442 Serial port support
2.发现对应选项在Device Drivers->Character devices->Serial drivers中
一看,本来根本就没有加载Samsung SoC serial support , 选成静态编译之后又呈现了
Support for console on Samsung SoC serial port ,便是它了,选上, 退出的时分顺便把
Kernel low-level debugging functions给撤销了不然咱们设置的printk会自行输出,就不知道ttySAC有没有加载成功了
3.最终发现本来时内核编译时需求传入一个发动指令:noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0,
make menuconfig -> Boot options -> 第三行增加上面的发动指令,保存退出,发动成功~

5.发动过程中,呈现问题:
问题:Unable to handle kernel NULL pointer dereference at virtual address 00000000
pgd = c0004000
[00000000] *pgd=00000000
Internal error: Oops: 80000005 [#1]
last sysfs file:
Modules linked in:
CPU: 0Not tainted(2.6.36.1 #20)
PC is at 0x0
LR is at s3c_gpio_setpull+0x80/0x8c
处理:参阅网址:http://blog.csdn.net/ExclusivePig/archive/2010/10/24/5961869.aspx
将static inline int s3c_gpio_do_setpull函数修改为以下内容:
static inline int s3c_gpio_do_setpull(struct s3c_gpio_chip *chip,
unsigned int off, s3c_gpio_pull_t pull)
{
if(NULL != chip->config->set_pull)
return (chip->config->set_pull)(chip, off, pull);
else
return EINVAL;
}

6.内核总算发动起来了,可是接着又呈现了下面的问题:
问题:List of all partitions:
1f00 256 mtdblock0 (driver?)
1f0164 mtdblock1 (driver?)
1f022048 mtdblock2 (driver?)
1f03 63152 mtdblock3 (driver?)
1f04 65536 mtdblock4 (driver?)
No filesystem could mount root, tried:cramfs
Kernel panic – not syncing: VFS: Unable to mount root fs on unknown-block(31,2)
处理:本来是没有增加YAFFS2文件体系,从网上下载,给内核打上补丁,从头make menuconfig,在file system中挑选YAFFS2,从头make.
打补丁如下:./patch-ker.sh c /work/system/linux-2.6.36.1

7.编译呈现问题,最新内核去掉了一些函数,和改变了一些函数的姓名,致使YAFFS2在编译过程中呈现过错。
处理:请参阅:http://www.linuxhq.com/kernel/v2.6/36-rc1/fs/attr.c

8.再次下载编译好的内核,运转呈现下面问题:
问题:yaffs: dev is 32505858 name is “mtdblock2”
yaffs: passed flags “”
yaffs: Attempting MTD mount on 31.2, “mtdblock2”
yaffs_read_super: isCheckpointed 0
VFS: Mounted root (yaffs filesystem) readonly on device 31:2.
devtmpfs: error mounting -2
Freeing init memory: 120K
Failed to execute /linuxrc.Attempting defaults…
Kernel panic – not syncing: No init found.Try passing init= option to kernel.
处理:1.发动指令有问题,依据检查分区信息(supervivi:part show)得知root分区在mtdblock3上,不是在2上
修改为:noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0
2.问题仍旧,从头make menuconfig,并比照友善之臂供给的mini2440源代码装备,从头挑选,
Device Driver ->Generic Driver Options ->(撤销)devtmpfs: error mounting -2被处理了,
可是仍然无法发动持续检查。
3.体系在发动过程中呈现了许多yaffs: block 456 is marked bad,block 457 is bad这样的过错,越来越多,经过网上搜索找到处理办法:
我用的是板子自带的supervivi,运用指令bon part 0,就起到格局化整个Nand Flash芯片的效果,假坏块天然就荡然无存了。随后问题就山穷水尽。
4.将mini2440自带的文件体系从头烧如板子,用mini2440自带的内核文件发动,正常,阐明文件体系没有问题,将自己编译的内核下载进去,仍然无法发动,
5.增加一些内核输出信息,总算发现内核在:search_binary_handler()函数中的fn(bprm, regs)函数后,履行失利了。十分抑郁…
6.文件体系没有问题,明显仍是内核编译有问题,然后经过网上查找说是load_elf_binary履行有问题,可能是加载文件体系的文件时不辨认文件格局,所以
从头make menuconfig最终发现本来是要将General setup—>Choose SLAB allocator —>选上SLAB,不要挑选SLUB。从头make

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/ruanjian/274891.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部