1。修改内核源码根目录下的Makefile文件
#ARCH?= arm
#CROSS_COMPILE?=arm-linux-
2。修改arch/arm/plat-s3c24xx/common-smdk.c文件,修慧租改Nand Flash的分区信息和Nand Flash的硬件信息。这里的分区一定要和你的bootloader的一致,你可以参考smdk_default_nand_part[]这个数据结构的做法。
3。还是2中用到的文件,修改static struct s3c2410_platform_nand smdk_nand_info = {
.tacls= 0,
.twrph0= 30, //这 三个数字要改的 以前是20 60 20
.twrph1= 0,
.nr_sets= ARRAY_SIZE(smdk_nand_sets),
.sets= smdk_nand_sets,
}
4。修改drivers/mtd/nand/s3c2410.c中s3c2410_nand_init_chip函数的NAND_ECC_SOFT为NAND_ECC_NONE。
5。晶振频率:修改arch/arm/mach-s3c2440/mach-smdk2440.c
static void __init smdk2440_map_io(void)
{
s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc))
s3c24xx_init_clocks(12000000)//改成和你的一样
s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs))
}
6。添加对yaffs2文件系统的支持:
下载yaffs2的源码包,解压后进入其中,其加入前码兆Linux内核(打补丁的方式)
#cd yaffs2
#./patch-ker.sh c $you_kernel_path(你的内核代码的目录)
7。配置内核
先拷贝s3c2410开发板的默认配置到内核根目录下,以简化配置过程
# cp arch/arm/configs/s3c2410_defconfig .config
# make menuconfig
1.General setup --->
[*] Configure standard kernel features (for small systems) --->
2. System Type ---->
[*] S3C2410 DMA support [*] Support ARM920T processor
S3C2410 Machines --->
[*] SMDK2410/A9M2410
S3C2440 Machines --->
[*] SMDK2440
[*] SMDK2440 with S3C2440 CPU module
3.Boot options --->
将 (root=/dev/hda1 ro init=/bin/bash console=ttySAC0) Default kernel command string
改成 (noinitrd root=/dev/mtdblock2 console=ttySAC0,115200 init=/linuxrc )
这里要特别注意root=/dev/mtdblock2 这个参数,mtdblock2是你的根文件系统所在的位置,和你在bootloader的分配有关,当然也和上述2。步骤的密切相关。不行的话多试几次。
4.[*] Enable loadable module support --->
[*] Module unloading
[*] Automatic kernel module loading
选择这两个,剩下的可以去掉
5.Device Drivers --->
<*>Memory Technology Device (MTD) support --->
[*] MTD partitioning support
<*>NAND Device Support --->
<*> NAND Flash support for S3C2410/S3C2440 SoC
[ ]S3C2410 NAND Hardware ECC //这个要去掉
6.File systems----->
Miscellaneous filesystems --->
<*>YAFFS2 file system support
7.make zImage
这个配置是2440和2410都通用的。网上有很多这样的教程。
另外还有一点要很注意而且也是比较头疼的:文件系统的制作,这个东西不好你弄,个人建议如果你想进驻嵌入式linux这个行业的话,韦东山的《嵌入式linux应用开发完全手册》很适合初学者学习,通过本书你会对嵌入式linux开发的整个流程都有个很明朗的认识。
好好学习吧。
是因为启动linux时GNU GRUB的默认启动项内核不一致导致的,开机时按歼握F1,进入到的界面配隐中按键盘上下箭头选中适合的,回车即可。如氏卖庆果可以启动成功,可以把其他的删掉,只保留能启动的一项即可,免得每次启动都要手动选择,如图:我的机器默认是上面的这个,启动就报kernel panic - not syncing: Fatal exception,改成下面的就可以正常启动Linux
所有人回答都不对,linux 版稿激本总是对这些宏改来改去,搞的早期的软件都不支持了,比如说:早期内核是这样定义的:
typedef uid_t kuid_t
typedef gid_t kgid_t
linux 3.1以后内核,不知道世界某个角落的2B程序员奇思妙想,改成下面这样的:孝敬穗
typedef struct {
uid_t val
}kuid_t
typedef struct {
gid_t val
}kgid_t
看到上面的代码,你就会明白,所有引用到uid_t和gid_t变量的地方,都要改为下面的巧卜调用方法:
ia_uid.val
ia_gid.val
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)