linux通过bootargs来识别开发板烧录的是什么根文件系统。
是因为没有编译u-boot产生mkimage命令。
3.启动文件系统时提示无法获取文件系统的init文件,原因yaffs文件系统没有制作好,对于nand-flash大于128M的nand用mkimage2yaffs-128M进行制作,mkimage2yaffs-128M主要对增加了nand_ecc.c和ood校验的计算。
4.启动文件系统时Kernel panic - not syncing: Attempted to kill init!的错误,原因arm-linux-gcc交叉编译器为4.4.3需要在linux kernel配置里面增加EABI的支持。
Kernel Features --->
[*] Use the ARM EABI to compile the kernel
[*] Allow old ABI binaries to run with this kernel (EXPERIMENTA)
这样也不行
5.内核太老:gcc的编译的版本太高
是因为我这里交叉编译器用的linux3.5.0的内核,导致busybox支持linux3.5.0以上的内核版本,在将linu内核烧录到开发板上后,我用的是3.0的内核编译生成的文件,烧录linux内核启动后,会创建init进程来执行/init或/initrc程序,而这个程序就是busybox。busybox不能执行,就死在了init进程这里。所以我们要在制作交叉编译器的时候,在如图的选项中修改交叉编译器支持的内核:比如让它的内核为2.6.0,这样它就支持2.6.0及以上的版本了。
如图,进入以后如下界面,选择specific kernel version:
我这里默认是2.6.9,这里可以自己改
(注意下面出现的两这种问题是因为我的开发板是fl2440的板子,我直接下载的源码包,没有基于2410的config文件来改,所以一切都是重新开始编译。这是非常麻烦的。没有很好的功底不建议这样做,否则就会遇到很多的问题,不知道怎么修改)
解决办法:用补丁包将linux内核重新打包一下编译。
{这样就不会出现上面那个图,没有下图的选项:
昨天因为虚拟机奔溃了,导致我的文件全部不见了,悲伤是那么大,哎。然后今天就又重新编译了内核,结果又出现了问题,吐血。如图:
百度后成功解决了编译问题。
修改3个文件
arch/arm/mach-pxa/raumfeld.c
drivers/input/touchscreen/eeti_ts.c
include/linux/input/eeti_ts.h
raumfeld.c文件
static struct eeti_ts_platform_data eeti_ts_pdata = {
.irq_active_high = 1,
+ .gpio = GPIO_TOUCH_IRQ,
};
static struct i2c_board_info raumfeld_controller_i2c_board_info __initdata = {
eeti_ts.c文件
struct input_dev *input;
struct work_struct work;
struct mutex mutex;
- int irq, irq_active_high;
+ int irq, gpio, irq_active_high;
};
#define EETI_TS_BITDEPTH (11)
static inline int eeti_ts_irq_active(struct eeti_ts_priv *priv)
{
- return gpio_get_value(irq_to_gpio(priv->irq)) == priv->irq_active_high;
+ return gpio_get_value(priv->gpio) == priv->irq_active_high;
}
pdata = client->dev.platform_data;
- if (pdata)
+ if (pdata) {
+ priv->gpio = pdata->gpio;
priv->irq_active_high = pdata->irq_active_high;
+ }
irq_flags = priv->irq_active_high ?
IRQF_TRIGGER_RISING : IRQF_TRIGGER_FALLING
eeti_ts.h文件
struct eeti_ts_platform_data {
unsigned int irq_active_high;
+ unsigned int gpio;
};
红色的这一部分的错误是内核从头开始出现的错误。}