移植内核:2.6.30.4
内核根目录下的.config为当前配置内核的且已经配置好的内核配置。make zImage以此为依据
配置内核的过程:
cd linux-2.6.30.4(进入Linux根目录)
cp arch/arm/configs/s3c2410_defconfig /linux-2.6.30.4(作为配置参考,考到根目录下)
mv s3c2410_defconfig .config(改名为.config)
make menuconfig ARCH=arm(ARCH=arm不能少)
配置过程
退出时记得选yes保存为.config(确保该配置是你已经配置且保存的配置,就算不改动也要保存。否则不能生成.config)
make zImage ARCH=arm CROSS_COMPILE=arm-linux-(ARCH=arm不可少)

或者
Makefile中定于ARCH=arm CROSS_COMPILE=arm-linux-
1,make s3c2410_defconfig(生成.config)
2,make zImage 即可生成压缩内核印象

uboot引导内核,入口点必须为0x30008000
zImage:go 0x30008000
uImage:bootm 0x30008000

busybox下载地址:
http://busybox.net/

linux快速修改文件夹及文件下所有文件与文件夹权限
chmod 777 * -R

uboot的tftp下载出现如下错误:
TFTP error: 'Permission denied' (0)
改正方法就是给待下载的文件加上可执行(chmod 777 文件)权限

uboot的使用:tftp下载内核,直接用交叉网线连接PC(实际上为虚拟机)和开发板即可
uboot启动之后,输入:printenv 查看
serverip是不是你的虚拟机的ip(终端ifconfig即可查看)
ipaddr要和serverip在同一个网段,即ip的前三段必须相同
ethaddr:开发板dm9000的MAC物理地址
netmast:子网掩码:255.255.255.0
serverip,ipaddr,ethaddr,netmast不符合要求的话,可以使用命令设置:(示例)
setenv serverip 169.254.209.223
setenv ipaddr 169.254.209.113
setenv netmast 255.255.255.0
setenv ethaddr 00:01:02:03:04:05
saveenv //设置完毕记得保存环境变量

uboot启动内核:uboot版本(2009.08)
条件:uboot的机器码和内核的机器码要一样

uboot部分修改:
机器码:
#gedit board/samsung/my2440/my2440.c 
gd->bd->bi_arch_number = MACH_TYPE_SMDK2440

内核部分:内核版本(2.6.30.4)
#gedit arch/arm/mach-s3c2440/mach-smdk2440.c
MACHINE_START(SMDK2440, "SMDK2440")

#gedit arch/arm/kernel/head.S  //在ENTRY(stext)下添加如下代码
ENTRY(stext)
    mov    r0, #0
    mov    r1, #0x3f0   //上面的MACH_TYPE值1008换成十六进制就是0x3f0
    ldr    r2, =0x30008000

内核中的nand分区一定要和bootloader中的一致:
#gedit arch/arm/plat-s3c24xx/common-smdk.c
         offsize       size
uboot : 0x00000000    0x00030000 //192kb
param : 0x00030000    0x00040000 //这个环境变量的地址范围配置的CONFIG_ENV_OFFSET一致
kernel: 0x00080000    0x00500000 //5mb
root  : 0x00580000    0x0c800000  //200mb

#gedit uboot/include/cofings/mini2440.h
查看:MTDPART_DEFAULT = " "   //默认分区

编译得到内核zImage

uImage的制作:
先将u-boot下的tools中的mkimage复制到主机的/usr/local/bin目录下,执行以下命令:
mkimage -n 'linux-2.6.30.4' -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008040 -d zImage uImage.img

uboot.bin拷贝到XP,用supervivi的a命令下载,开关拨到nand启动
uImage和根文件系统,考到tftp的收发文件夹,使用tftp服务传送

在u-boot命令行下输入:(自启动的将内核读入内存)
set bootcmd 'nand read 0x30008000 内核偏移地址 内核区大小;bootm 0x30008000'
saveenv

把uImage.img用tftp下载到内存中,然后再固化到Nand Flash中,操作和执行图如下:
tftp 0x30008000 uImage.img  //将uImage.img下载到内存0x30008000处

nand erase 0x80000 0x500000 //擦除nand的kernel分区(officesize ,size)

nand write 0x30008000 0x80000 0x500000 //将内存0x30008000处的内容写入到nand的kernel分区

重启开发板(reset命令),完成内核自启动

第一个分区(bootloader)对应mtdblock0
第二个分区(param参数)对应mtdblock1
第三个分区(kernel)对应mtdblock2
第四个分区(root根文件系统)对应mtdblock3
此处的命令参数取代内核配置的boot命令参数,不输入则默认内核的boot参数

内核自启动yaffs2文件系统:
uboot命令行下输入:
set bootargs noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0,115200 mem=64M
saveenv

把root-2.6.30.4.bin用tftp下载到内存中,然后再固化到Nand Flash中,操作和执行图如下:
tftp 0x30008000 root-2.6.30.4.bin  //将root-2.6.30.4.bin下载到内存0x30008000处

nand erase 0x00580000  0x0c800000 //擦除nand处0x00380000大小0x0c800000的内容(文件系统分区)

nand write.yaffs2 0x30008000 0x00580000 rootfs的大小 //将内存0x30008000处的内容写入到nand的0x00380000处
重启开发板(reset命令),完成内核自启动yaffs2文件系统

yaffs2文件系统制作注意:
制作好的文件系统要是2112的整数倍(128MB及以上的flash用mkyaffs2image-128M工具),
【528的整数倍(64M的flash用mkyaffs2image工具)】
否则tftp下载到nand的话,会提示attempt to write error length data的错误

[MY2440] # tftp 0x30008000 root-2.6.30.4.bin
dm9000 i/o: 0x20000300, id: 0x90000a46 
DM9000: running in 16 bit mode
MAC: 08:00:3e:26:0a:5b
operating at unknown: 0 mode
Using dm9000 device
TFTP from server 169.254.209.223; our IP address is 169.254.209.113
Filename 'root-2.6.30.4.bin'.
Load address: 0x30008000
Loading: T T ###################################T #############T #################
         ######################################T ###########################
         #################################################################
         #########################T T ########################################
         #################################################################
         #################################################################
         ###################T #########################
done
Bytes transferred = 6359232 (6108c0 hex)
[MY2440] # nand erase 0x380000 0xc800000

NAND erase: device 0 offset 0x380000, size 0xc800000
Erasing at 0xc800000 -- 213254144% complete.
OK
[MY2440] # nand write.yaffs2 0x30008000 0x380000 0x6108c0

NAND write: device 0 offset 0x380000, size 0x6108c0
Skip the first good block 20000
Writing at 0x20000 --  6166528 bytes written: OK

static struct mtd_partition smdk_default_nand_part[] = {
[0] = {
.name  = "uboot",
.size  = 0x00000000,
.offset  = 0x00030000, //192KB
},
[1] = {
.name  = "param",
.offset = 0x00030000,
.size  = 0x00040000, //256KB
},
[2] = {
.name  = "kernel",
.offset = 0x00080000,
.size  = 0x00500000, //5MB
},
[3] = {
.name  = "root",
.offset  = 0x00580000,
.size  = 0x0c800000, //200MB
}

Wrong Image Format for bootm command  出错原因:
1) 未使用uboot中mkimage  工具制作uImage,却使用bootm 启动
2)   tftp 传送地址错误
3) nand write 格式和地址错误

4) nand read 格式和地址错误

linux内核移植过程问题总结的更多相关文章

  1. 【转】 linux内核移植和驱动添加(三)

    原文网址:http://blog.chinaunix.net/uid-29589379-id-4708909.html 原文地址:linux内核移植和驱动添加(三) 作者:genehang 四,LED ...

  2. linux 内核移植和根文件系统的制作【转载】

    原文地址:http://www.cnblogs.com/hnrainll/archive/2011/06/09/2076214.html 1.1 Linux内核基础知识 在动手进行Linux内核移植之 ...

  3. linux 内核移植和根文件系统的制作

    1.1 Linux内核基础知识 在动手进行Linux内核移植之前,非常有必要对Linux内核进行一定的了解,下面从Linux内核的版本和分类说起. 1.1.1  Linux版本 Linux内核的版本号 ...

  4. Linux内核启动过程概述

    版权声明:本文原创,转载需声明作者ID和原文链接地址. Hi!大家好,我是CrazyCatJack.今天给大家带来的是Linux内核启动过程概述.希望能够帮助大家更好的理解Linux内核的启动,并且创 ...

  5. 基于tiny4412的Linux内核移植 -- 设备树的展开

    作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...

  6. 基于tiny4412的Linux内核移植 -- 设备树的展开【转】

    转自:https://www.cnblogs.com/pengdonglin137/p/5248114.html#_lab2_3_1 阅读目录(Content) 作者信息 平台简介 摘要 正文 一.根 ...

  7. 基于tiny4412的Linux内核移植(支持device tree)(三)

    作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...

  8. Linux内核启动过程start_kernel分析

    虽然题目是start_kernel分析,但是由于我在ubuntu环境下配置实验环境遇到了一些问题,我觉得有必要把这些问题及其解决办法写下来. 首先我使用的是Ubuntu14.04 amx64,以下的步 ...

  9. 基于tiny4412的Linux内核移植 --- aliases节点解析

    作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...

随机推荐

  1. 20170908工作日记--Volley源码详解

    Volley没有jar包,需要从官网上下载源码自己编译出来,或者做成相关moudle引入项目中.我们先从最简单的使用方法入手进行分析: //创建一个网络请求队列 RequestQueue reques ...

  2. nodejs 上传文件 upload

    只是现在主要用nodejs做后端了,所以记录一些上传文件的使用方法. 上传文件的主要方式: 1.form上传,优点是方便,缺点是没法回调,上传后返回的数据没法处理 2.ajax上传,优点是可控制,有回 ...

  3. mongodb 两小时入门

    传统的计算机应用大多使用关系型数据库来存储数据,比如大家可能熟悉的MySql, Sqlite等等,它的特点是数据以表格(table)的形式储存起来的.数据库由一张张排列整齐的表格构成,就好像一个Exc ...

  4. ggdl

    \documentclass{article} \usepackage{geometry} \geometry{hmargin=1cm,vmargin=1cm} \usepackage{tikz} % ...

  5. delphi API: SetWindowPos改变窗口的位置与状态

    SetWindowPos 函数功能:该函数改变一个子窗口,弹出式窗口式顶层窗口的尺寸,位置和Z序.子窗口,弹出式窗口,及顶层窗口根据它们在屏幕上出现的顺序排序.顶层窗口设置的级别最高,并且被设置为Z序 ...

  6. python的数据存储

    Python存储数据 使用json.dump()和json.load() 不管专注的是什么,程序都把用户提供的信息存储在列表和字典等数据结构中.用户关闭程序时,你几乎总是要保存他们提供的信息:一种简单 ...

  7. ASP.Net Core 2.2 MVC入门到基本使用系列 (三)

    本教程会对基本的.Net Core 进行一个大概的且不会太深入的讲解, 在您看完本系列之后, 能基本甚至熟练的使用.Net Core进行Web开发, 感受到.Net Core的魅力. 本教程知识点大体 ...

  8. .Net Core 跨平台应用使用串口、串口通信 ,可能出现的问题、更简洁的实现方法

    前些天在学习在 .NET Core下,跨平台使用串口通讯,有一篇文章说到在Linux/物联网下,实现通讯. 主要问题出现在以下两个类库 SerialPortStream flyfire.CustomS ...

  9. C#winfrom最简DBHelp(数据库连接操作)

    代码如下: //需引用命名空间 using System.Data; using System.Data.SqlClient; class DBHelper { //定义数据库连接语句,连接语句书写方 ...

  10. 关于ORACLE的字符窜存储(未完善,欢迎补充)

    oracle中常见的用于存储字符串的数据类型有: 数据类型 是否定长 最多存储数 效率排行 备注 是否oracle特有 英文占位 中文占位 char 是 2000 比VARCHAR2稍高 char的长 ...