移植完u-boot后,接下来就是linux内核了.以下记录我移植的步骤,如有问题,欢迎指正.
1.下载linux kernel源代码
到http://www.kernel.org/下载linux内核源代码,这里我们使用2.6.24.4的内核.
解压linux-2.6.24.4.tar.bz2
[matt@localhost GEC2410]$ tar -xvjf linux-2.6.24.4.tar.bz2
[matt@localhost GEC2410]$ cd linux-2.6.24.4
2.修改顶层Makefile,设置交叉编译器
ARCH ?= arm
CROSS_COMPILE ?= /home/GEC2410/toolchain/arm-softfloat-linux-gnu/bin/arm-softfloat-linux-gnu-
3. 复制编译配置文件到linux-2.6.24.4下为默认配置文件.config,移植过程以sdmk2410开发板为模板.
同时将复制一个新的配置文件gec2410.defconfig放到configs目录下,最近的配置都保存到这个这个文件,这样就可以直接用make gec2410_defconfig进行配置了.
[matt@localhostlinux-2.6.24.4]$cp arch/arm/configs/s3c2410_defconfig arch/arm/configs/gec2410.defconfig
[matt@localhostlinux-2.6.24.4]$cp arch/arm/configs/s3c2410_defconfig .config
3.设置Nand分区
我们将nand(64M)分成4个区,分别为u-boot 1MB, Linux Kernel 3MB, Root 40MB, User 20MB.
修改arch/arm/plat-s3c24xx/common-smdk.c中108行的smdk_default_nand_part[]如下:
[matt@localhost linux-2.6.24.4]$ vim arch/arm/plat-s3c24xx/common-smdk.c
4. 禁止Flash ECC校验
由于uboot通过软件ECC,而内核是硬件ECC,所以这里将内核ECC禁止.
修改drivers/mtd/nand/s3c2410.c中的s3c2410_nand_init_chip()函数,在该函数体最后加上一句:
chip->eccmode = NAND_ECC_NONE;
5 配置内核
(1) 支持启动时挂载devfs
为了我们的内核支持devfs以及在启动时并在/sbin/init运行之前能自动挂载/dev为devfs文件系统,修改fs/Kconfig文件
vi fs/Kconfig
找到menu "Pseudo filesystems"
添加如下语句:
config DEVFS_FS
bool "/dev file system support (OBSOLETE)"
default y
config DEVFS_MOUNT
bool "Automatically mount at boot"
default y
depends on DEVFS_FS
(2)内核配置
首先加载SMDK2410的内核配置
[matt@localhost linux-2.6.24.4]$make smdk2410_defconfig
[matt@localhost linux-2.6.24.4]$ make menuconfig
增加MTD,Nand支持,选中
Device Drivers-Memory Technology Device (MTD) support
选中使用默认配置即可,其中包括以下等支持:
<*>MTD partitioning support
<*>Command line partition table parsing
<*>Direct char device access to MTD devices
<*>Caching block device access to MTD devices
<*>NAND Device Support
<*>NAND Flash support for S3C2410/S3C2440 SoC
增加FS支持(NFS,cramfs):
File System:
<*>Network File Systems
Miscellaneous filesystems -->
<*>Compressed ROM file system support (cramfs)
Pseudo filesystems -->
<*>/dev file system support (OBSOLETE)
可以看到上面设置的devfs已经被支持了.
保存配置文件,下次就可以用make gec2410_defconfig来加载配置信息了.
[matt@localhostlinux-2.6.24.4]$cp .config arch/arm/configs/gec2410_defconfig
6.制作uImage
zImage是ARM Linux常用的一种压缩映像文件,uImage是U-boot专用的映像文件,它是在zImage之前加上一个长度为0x40的“头”,说明这个映像文件的类型、加载位置、生成时间、大小等信息。
可以使用mkimage来生成uImage,该工具位于u-boot下的tools目录,编译完u-boot就可以找到这个工具.我们拷到/linux2.6.24/arm/arm/boot/,用来将zImage生成uImage.
其参数含义为
-A ==> set architecture to 'arch' //用于指定CPU类型,比如ARM
-O ==> set operating system to 'os' //用于指定操作系统,比如Linux
-T ==> set image type to 'type' //用于指定image类型,比如Kernel
-C ==> set compression type 'comp' //指定压缩类型
-a ==> set load address to 'addr' (hex) //指定image的载入地址
-e ==> set entry point to 'ep' (hex) //内核的入口地址,一般是:image的载入地址+0x40(信息头的大小)
-n ==> set image name to 'name' //image在头结构中的命名
-d ==> use image data from 'datafile' //无头信息的image文件名
-x ==> set XIP (execute in place) //设置执行位置
[matt@localhost boot]$ ./mkimage -A arm -O linux -T kernel -C none -a 30008000 -e 30008040 -n linux-2.6.24 -d zImage uImage
为了方便起见,我们将这个命令写入到一个mkuimage.sh的批处理文件中,这样只要运行这个文件就不必输入这么长的命令了.
mkuimage.sh:
echo "making uImage..."
./mkimage -A arm -O linux -T kernel -C none -a 30008000 -e 30008040 -n linux-2.6.24 -d zImage uImage
echo "making uImage finished..."
然后运行:
[matt@localhost linux-2.6.24.4]$ cd arch/arm/boot
[matt@localhost boot]$ chmod 777 mkuImage.sh
[matt@localhost boot]$ sh mkuImage.sh(或者./mkuImage.sh)
making uImage...
Image Name: linux-2.6.24
Created: Mon May 24 10:06:09 2010
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1567656 Bytes = 1530.91 kB = 1.50 MB
Load Address: 0x30008000
Entry Point: 0x30008040
making uImage finished...
就可以看到uImage生成了.
使用u-boot烧写uImage到nand,设置启动参数让u-boot自动加载uImage运行内核.
GEC2410#tftp 30008000 uImage
GEC2410#nand erase 100000 200000
GEC2410#nand write 30008000 100000 200000
GEC2410#setenv bootcmd nand read 30008000 100000 200000/;bootm
GEC2410#saveenv
GEC2410#bootm
## Booting image at 30008000 ...
Image Name: linux-2.6.24
Created: 2010-05-21 8:35:34 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1567720 Bytes = 1.5 MB
Load Address: 30008000
Entry Point: 30008040
Verifying Checksum ... OK
XIP Kernel Image ... OK
Starting kernel ...
Uncompressing Linux.............................................................
......................................... done, booting the kernel.
......
这时linux就启动了,但这时cs8900网卡驱动还没有,根文件系统还没有.系统会停在.
No filesystem could mount root, tried: ext3 ext2 cramfs msdos vfat romfs
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(31,2)
下一步先移植cs8900网卡驱动,然后是根文件系统.
上一篇:linux 2.6.24.4在S3C2410上的移植(根文件系统cramfs,ramdisk,jffs2)(基于GEC2410)
下一篇:UBOOT-1.1.6在S3C2410上的移植(基于GEC2410)
推荐阅读最新更新时间:2024-11-17 00:49
推荐帖子
- 一些hercules试题及答案
- 网上搜到的一份资料,一些hercules试题及答案,如果你的题目刚好碰到,就偷着乐吧,我撞到一题,娃哈哈哈第1题:VIM模块有()个中断请求源?A32B64C96D128正确答案:C所选答案:B第2题:TMS570LS中的存储器保护单元(MPU)的属性不可以配置为?A只读B只写C可读写D单次擦写正确答案:D所选答案:D第3题:ESM
- wojiaomt 微控制器 MCU
- 猜猜这是啥?
- 猜猜这是啥?电源路由或者交换机我看见后面的网线了!这个是一个电脑的主机吧,我看到有一个类似CPU散热器的东西
- 老虎油 DIY/开源硬件专区
- multisim中的晶振怎么改不了频率?
- 在multisim10中用门电路做的晶振怎么不能改变频率?改变了晶振型号还是不管用,望高手指点multisim中的晶振怎么改不了频率?
- longlianxi 嵌入式系统
- 四层板的电源层需不需要弄成完整的一个平面?
- 一般四层板的顺序是:信号层-地层-电源层-信号层;为了保证最小的回路路径,地层需要保持完整的一整块;那么,电源层是否也需要保持完整呢?保持完整的电源层可以和地层形成一个很大的分布电容,对每个信号都起到一定的滤波作用,并且也有一定的屏蔽效果。但是我经常看到别人的参考设计,电源层是直接拉线连接的,并没有搞成完整的一个平面。如下TI的一个蓝牙参考设计大家怎么看?四层板的电源层需不需要弄成完整的一个平面?纠结这个干啥呢满足要求根据自己的需求就行了散热什么的和
- sfcsdc PCB设计
- 可以运行CircuitPython或Arduino的FeatherSnow
- FeatherSnow,可以使用CircuitPython或Arduino释放编程创造力。可以运行CircuitPython或Arduino的FeatherSnow
- dcexpert MicroPython开源版块
- MicroPython 移植到 WCH-CH32V307 RISC-V 单片机
- 概述CH32V305/7系列是基于32位RISC-V设计的互联型微控制器,配备了硬件堆栈区、快速中断入口,在标准RISC-V基础上大大提高了中断响应速度。加入单精度浮点指令集,扩充堆栈区,具有更高的运算性能。扩展串口U(S)ART数量到8组,电机定时器到4组。提供USB2.0高速接口(480Mbps)并内置了PHY收发器,以太网MAC升级到千兆并集成了10M-PHY模块。系统框图产品特点 RISC-V4F处理器,最高144MHz系统主频 支持单周期
- dcexpert MicroPython开源版块
设计资源 培训 开发板 精华推荐
- ESP-12Fwifi远程开机卡
- AM1G-2412SZ 12V 1 瓦 DC/DC 转换器的典型应用
- 使用 LTC3637HDHC 36.5V 至 76V 输入至 36V 输出、1A 降压型稳压器的典型应用
- EVAL-AD7656-1CBZ,用于 AD7656 的评估板,16 位,250KSPS,用于电力线通信的 6CH ADC
- 【毕设】基于STM32的智能防疫门禁
- C5120964_TB6600HG步进电机驱动方案验证板
- LT3990IMSE 2.5V 降压转换器的典型应用
- LT6657BHMS8-3 1.5V 最小电源电压的典型应用电路
- 课设图三
- 在系统 12 位 DAC 中解码多个 AD5324 器件的典型应用
- 2024年Automechanika Shanghai海量同期活动刷新历届记录,汇聚行业智慧,共谋未来发展
- 企业文化分享 如何培养稀缺的硅IP专业人员?SmartDV开启的个人成长与团队协作之旅
- 恩智浦发布首个超宽带无线电池管理系统解决方案
- 北交大本科生探秘泰克先进半导体开放实验室,亲历前沿高科技魅力
- 新帅上任:杜德森博士(Dr. Torsten Derr)将于2025年1月1日出任肖特集团首席执行官
- 边缘 AI 如何提升日常体验
- 苹果要首发!台积电宣布2nm已准备就绪
- AMD有望用上全新芯片堆叠技术:延迟大幅减少、性能显著提升
- 宁德时代发布10月战报
- 2024年10月电池行业:增长势头不减!