Linux移植之移植步骤
在这里总结一下我在移植Linux2.6.22.6内核过程时的步骤。移植成功后最终能挂接做好的根文件系统,并且启动第一个init程序。移植的步骤如下:
1、将网上下载的内核源码文件linux-2.6.22.6.tar.bz2放入/work/system路径下。
2、切换到/work/system,使用tar xjf linux-2.6.22.6.tar.bz2解压缩内核源码文件得到一个名为linux-2.6.22.6的文件夹
3、cd linux-2.6.22.6切换到内核文件夹
4、修改顶层Makefile文件使得 ARCH ?= arm;CROSS_COMPILE ?= arm-linux-
5、执行make s3c2410_defconfig修改内核配置,最终会生成一个.confg文件
6、执行make menuconfig配置内核,会读取.confg文件然后根据这个文件的基础上更改配置,这里配置先不用更改,直接退出
7、make uImage之后,将产生的uImage文件通过UBOOT的usb下载功能下载到指定地址,内核分区
8、在uboot界面执行boot启动内核,可以看到内核启动之后出现一片乱码
9、更改CPU的时钟晶振,找到 (arch\arm\mach-s3c2440\Mach-smdk2440.c)文件,将327行的s3c24xx_init_clocks函数里的16934400改为12000000,代表12M晶振
static void __init smdk2440_map_io(void)
{
s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));
s3c24xx_init_clocks();//将16934400改为12000000
s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));
}
10、将更改过的代码继续编译make uImage,重复第7步骤。
11、发现乱码消失了,但是还是不能启动位于nand flash上的第四分区的根文件系统
12、更改MTD分区,找到 (arch\arm\plat-s3c24xx\Common-smdk.c)文件,将smdk_default_nand_part数组改为如下的形式,这表示将nandflash分为四个区:bootloader区、params区、kernel区、root区。
static struct mtd_partition smdk_default_nand_part[] = {
[] = {
.name = "bootloader",
.size = 0x00040000,
.offset = ,
},
[] = {
.name = "params",
.offset = 0x00040000,
.size = 0x00020000,
},
[] = {
.name = "kernel",
.offset = 0x00060000,
.size = 0x00200000,
},
[] = {
.name = "root",
.offset = 0x00260000,
.size = 0x0fda0000,
}
};
13、将更改过的代码继续编译make uImage,重复第7步骤。
14、发现内核还是不能挂接根文件系统,出现No filesystem could mount root, tried: ext3 ext2 cramfs msdos vfat romfs字样。
15、增加yaffs2文件系统支持nandfalsh
a、从网上下载的yaffs_source.tar.gz放到/work/system目录下
b、tar xzf yaffs_source.tar.gz解压得到Development目录下分别有yaffs2和yaffs两个文件夹,其中yaffs2是比较新的文件系统
c、进入yaffs2文件夹后,./patch-ker.sh c /work/system/linux-2.6.22.6打补丁到内核所在目录
上述命令完成以下三件事情
1)、修改内核fs/Kconfig文件,增加source "fs/yaffs2/Kconfig",表示读入fs/yaffs2/Kconfig这个Kconfig文件。
2)、修改内核fs/Makefile文件,增加obj-$(CONFIG_YAFFS_FS) += yaffs2/,表示增加yaffs2/目录编译
3)、将yaffs2源码目录下的Makefile.kernel文件复制为内核fs/yaffs2/Makefile
将yaffs2源码目录下的Kconfig文件复制到内核fs/yaffs2/目录下
将yaffs2源码目录下的*.c、*.h文件(不包括子目录下的文件)复制到内核fs/yaffs2/目录下
d、make menuconfig配置内核支持yaffs2文件系统
File systems
Miscellaneous filesystems
<*>YAFFS file system support
16、将更改过的代码继续编译make uImage,重复第7步骤。
17、发现内核可以启动位于root分区的根文件系统了,移植成功
Linux移植之移植步骤的更多相关文章
- 嵌入式linux应用程序移植方法总结
嵌入式linux应用程序移植方法总结 前段时间一直在做openCapwap的移植和调试工作,现在工作已接近尾声,编写本文档对前段工作进行一个总结,分享下openCapwap移植过程中的经验和感悟.江浩 ...
- 【转】将 Linux 应用程序移植到 64 位系统上
原文网址:http://www.ibm.com/developerworks/cn/linux/l-port64.html 随着 64 位体系结构的普及,针对 64 位系统准备好您的 Linux® 软 ...
- Linux最小系统移植之早期打印CONFIG_EARLY_PRINTK
请先参考先前博文: Linux最小系统移植之早期打印CONFIG_DEBUG_LL , 因为eraly_printk其实就是对printch()封装的 一. 必要选项(在上面链接选中的前提下再新增 ...
- Linux最小系统移植之早期打印CONFIG_DEBUG_LL
一.几个关键宏定义 CONFIG_DEBUG_LL. CONFIG_DEBUG_LL_INCLUDE 容我慢慢道来, 首先要使能早期打印, menuconfig必须选中CONFIG_DEBUG_LL, ...
- 16C554在LINUX上的移植(AT91)
16C554在LINUX上的移植(AT91) linux版本:3.14.17 AT91SAMa5d36 EINTA_0 ARM-IO5 PA14 14 EINTA ...
- 基于Linux的kfifo移植到STM32(支持os的互斥访问)
基于Linux的kfifo移植到STM32(支持os的互斥访问) 关于kfifo kfifo是内核里面的一个First In First Out数据结构,它采用环形循环队列的数据结构来实现:它提供一个 ...
- LINUX为什么要进行内核移植 内核移植的作用
LINUX为什么要进行内核移植 内核移植的作用,不移植能用么? LZ的问题应该是为什么要重新编译内核吧.既然你已经可以跑了,证明你现在用的内核已经移植到你用的硬件上,自然你也不需要做什么移植.通常 ...
- Centos linux php扩展安装步骤
使用phpinfo()函数输出PHP信息,然后找到Configuration File (php.ini) apachectl 其设计意图是帮助管理员控制Apache httpd后台守护进程的功能. ...
- Linux VMware tools安装步骤
Linux VMware tools安装步骤: 1.安装环境介绍 #虚拟机版本:VMware-workstation-full-10 #linux分发版本:CentOS-6.4-i386-LiveCD ...
- 测试那些事儿—Linux搭建环境基础步骤
Linux搭建环境基础步骤 准备工具:SecureCRT工具(Linux工具,连接服务器)FTP传输工具(上传文件到服务器)MySQL连接工具 安装包(以下文件均为压缩包rpm格式和tar.gz):J ...
随机推荐
- 如何用jar命令生成可执行的jar文件
如果你已经把zh.java文件生成了zh.class文件 如果zh.class的路径是bin/com/zhang/zh.class 则在bin目录下放一个manifest.mf文件,文件内容如下: M ...
- 循环取到json中的字段数据,加到html中
$.ajax({ type:'post', data:{specialName:specialName,count:count}, url:"admin/pcAdminGetArticleL ...
- JSP页面中的小知识
1.<%…%>和<%!…%>的区别? <%…%>用于在JSP页面中嵌入Java脚本,即代码块 <%!…%>用于在JSP页面中申明变量或方法,可以在该页面 ...
- SQL--结构化的查询语言
SQL--结构化的查询语言T-SQL:Transact-SQL (SQL的增强版) 逻辑运算符 and && or || not ! 关系运算符 等于 = 不等于<>或!= ...
- 传输层——UDP报文头介绍
16位源端口 16位目的端口 16位总长度 16位校验和 数据 源端口:长度为16位,2个字节. 目的端口:长度为16位,2个字节. 总长度:长度为16位,2个字节,表示 UDP包头长度 和 数据长度 ...
- Python算法(一)冒泡排序
3 5 1 6 2 1)第一次:找到这些数中最大的一个,并把它放最后. 3.5找到大的数放到第二个位置 5.1找到大的数放到第三个位置 5.6找到大的数放到第四个位置 2.6找到大的数放大第五个位置 ...
- 大型运输行业实战_day15_1_全文检索之Lucene
1.引入 全文检索简介: 非结构化数据又一种叫法叫全文数据.从全文数据(文本)中进行检索就叫全文检索. 2.数据库搜索的弊端 案例 : select * from product whe ...
- Java中字节流和字符流复制文件
字节流和字符流复制文件的过程: 1.建立两个流对象 绑定数据源和目的地 2.遍历出需复制的文件写入复制过后的新文件中(只不过是遍历的时候是区分字节和字符的) 3.访问结束后关闭资源 字节流复制文件: ...
- cdnbest如何配置ssl证书
cdnbest添加ssl证书有三种方式: 一.第一种在站点设置中添加: 点打开,加入证书后点提交 可以点检测功能检查证书是否有效,打勾说明证书是有效的 二. 第二种是在域名记录里添加: 如下图点击,添 ...
- javascript学习笔记(六):对象、内置对象
创建对象 对象属性赋值的方式 <!DOCTYPE html> <html> <head lang="en"> <meta chaset=& ...