Chinaunix首页 | 论坛 | 博客
  • 博客访问: 222441
  • 博文数量: 22
  • 博客积分: 847
  • 博客等级: 准尉
  • 技术积分: 325
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-02 11:08
文章存档

2012年(9)

2011年(8)

2010年(5)

我的朋友

分类: LINUX

2011-09-03 03:43:10

1、自己用busybox制作的根文件系统不能用,具体表现为串口终端上最后一行打印:Kernel Panic -- not syncing: attempted to kill init!
原因:问题的原因说来可笑,因为所用的linux系统版本是2.3.28和2.3.12两个版本。而所用的交叉编译器arm-linux-gcc的版本是4.4.3。其中所用的glibc库为2.9版本。用file命令查看arm-linux-gcc下面的/lib目录中的glibc-2.9.so时打印出如下消息:
libc-2.9.so: ELF 32-bit LSB shared object, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, not stripped
如上面所示这个版本的glibc是在linux2.6.32上用的。也就是说在低于linux2.6.32版本的内核中这个c动态链接库是不能用的。而我的busybox使用4.4.3版本的arm-linux-gcc编译,在linux2.3.28和linux2.3.12上面当然不能运行啦。这样在yaffs文件系统加载之后就会报出Kernel Panic -- not syncing: attempted to kill init!的错误了。
2、根文件系统中/etc目录中需要哪些文件?
这个问题其实在《嵌入式linux应用开发完全手册》中做了很详细的讲述。作为一个比较简单的文件系统。只需要三个文件即可:fstab、inittab、/init.d/rcS。fstab用来说明文件的组织形式。表示在执行“mount -a”命令之后将要挂载的文件系统。具体代码如下:
none  /proc  proc defaults 0 0
none  /dev/pts devpts mode=0622 0 0
tmpfs  /tmp  tmpfs defaults 0 0
tmpfs  /dev  tmpfs defaults 0 0
sysfs  /sys  sysfs defaults 0 0
inittab文件是linux系统启动完成之后执行的第一个命令,一般放置相关配置,比如选择执行初始化的脚本文件、shutdown命令之后的执行的脚本文件,其中有一项比较重要,用来选择初始应答的shell终端。代码如下:
::sysinit:/etc/init.d/rcS
s3c2410_serial0::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount -a -r
::shutdown:/bin/umount -a -r
/init.d/rcS文件中执行的是一些开机启动程序。如果/dev是用mdev机制构造,则在这里要加入mdev的相关设置。一般网络的配置和开机自启动的程序脚本也放在这里面。代码如下:
#!/bin/sh
/bin/mount -a
mkdir /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
/sbin/ifconfig eth0 192.168.1.15 up
要值得注意的是不要忘了在创建的文件系统所有目录里面的文件都要是可执行的。可以用命令chmod 777 *在各级中设置文件属性。如果没有设置,有可能会出现如下错误:
Kernel panic - not syncing: No init found.  Try passing init= option to kernel.
关于此错误的种种原因网上也有详尽的分析。
3、eclipse的gdbserver远程调试的设置问题,之前调试多线程的时候总是出错误,不能定位到多线程。
这里比较推荐用较新的gdb源码和arm-linux-gcc的交叉编译器。当然,如果你所用的工具是新的,那么的目标机上的linux系统最好也是比较新的。要不然又会出现一大堆莫名的问题。
我这里选用的gdb版本是7.3.在gnu的官方网站上下载。选用的arm-linux-gcc编译器是4.4.3。可以按照网上的方法编译出arm-linux-gdb和gdbserver。这里主要说的是eclipse cdt套件中的远程调试的相关设置方法。
首先在run菜单下面点击debug configurations选项
然后在C/C++ Application下面新建一个debug项。注意一定要在这个里面建立。我之前在attach to application中建立就出现了莫名的问题。
如果是之前没有做什么更改的话,在此之前还要点击一下apply左边的一个超链接形式的词:select other。选择其他的launcher。
勾选use configuration specific。。。这个选项后选择standard Create Process Launcher这个选项后点ok
debuger选择gdbserver,gdb debuger选择arm-linux-gdb。如果没有加入到PATH中还需要加入完整的路径
Protocol选择mi 1
在shared libraries中加入arm-linux-gcc目录下的glibc库的路径,以添加共享库的支持。
最后再connection一栏中加入目标机的IP和端口号。设置即完成了。
阅读(1600) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~