前一阵子已经将U-boot移植好了,从今天开始,我们开始移植linux内核。移植的内核为3.4.2,移植的开发板为:jz2440开发板。
想看之前移植U-boot的记录,可以查看我的博客专栏,点击链接:点击查看U-boot移植教程

首先我们从官网下载3.4.2内核,先解压内核拿到Lniux服务器:
tar xjf linux-3.4.2.tar.bz2
cd linux-3.4.2/

然后修改Makefile,选择默认配置:
vi Makefile
找到下面这句话:

ARCH            ?= $(SUBARCH)
CROSS_COMPILE   ?= $(CONFIG_CROSS_COMPILE:"%"=%)

改为:

ARCH            ?= arm
CROSS_COMPILE   ?= arm-linux-

这里需要注意一点,交叉编译工具,我这里用的是4.3.2(有的交叉编译工具编译不通过)。
然后选择默认配置:
make s3c2410_defconfig
然后:
make uImage
显示编译成功:
然后将生成的映像文件拷贝到服务器的文件系统目录(这一步不是必须的,可以根据自己的实际情况,将映像文件烧写到开发板):
cp arch/arm/boot/uImage /work/nfs_root/uImage_new

然后将其烧写到开发板,这里就是在uboot启动界面输入命令了(烧写方法不唯一,我这里是用的nfs协议直接从服务器上下载内核映像文件):
nfs 32000000 192.168.1.101:/work/nfs_root/uImage_new
显示如下:

(注: 我在一开始用nfs挂载内核的的时候,出现如下错误:T T * ERROR: Cannot umount。
解决办法:要在主机的/etc/hosts文件中加入:
开发板ip nfs目录(我的是:/work/nfs_root)
例如:192.168.1.103 /work/nfs_root/

bootm 32000000
串口显示乱码。很显然,虽然我们的内核已经启动,但是串口的设置,肯定没有设置好。

通过分析uboot源码知,获取及其ID的方法为从环境变量中获取,或者使用默认的ID
uboot的默认MACH ID:
gd->bd->bi_arch_number = MACH_TYPE_SMDK2410; // 193
如果s = getenv(“machid”);成功,则使用它
否则使用默认的

我们先自己在环境变量中设置:
在UBOOT里:
set machid 16a // smdk2440 mach-smdk2440.c

set machid 7CF // mini2440 mach-mini2440.c
(这个设置我测试了一下,不设置也可以启动内核)

还需要更改一下环境变量:
set bootargs console=ttySAC0,115200 root=dev/mtdblock3
还有一个地方需要修改,如果我们使用的是 smdk2440的话,需要将arch\arm\mach-s3c24xx\mach-smdk2440.c中的

s3c24xx_init_clocks(16934400);

改为:

s3c24xx_init_clocks(12000000);

然后重新编译内核,挂载内核:
nfs 32000000 192.168.1.101:/work/nfs_root/uImage_new
bootm 32000000

终于,我们的打印的是正常的字符了,但是内核还没有真正启动,还是有一些错误,今天就不写了,放到下一篇文章中继续解决。

想一起探讨以及获得各种学习资源加我(有我博客中写的代码的原稿):
qq:1126137994
微信:liu1126137994
可以共同交流关于嵌入式,操作系统,C++语言,C语言,数据结构等技术问题。

【移植Linux 3.4.2内核第一步】之简单修改相关推荐

  1. 【移植Linux 3.4.2内核第二步】之修改系统分区

    今天接着移植Linux 3.4.2内核,接着上一篇文章(点击查看:上一篇文章)我们完成了内核的串口启动打印输出,但是无法挂载根文件系统,我们看看启动后显示的是什么: 从打印结构可以看出,我们的分区不对 ...

  2. S3C2440移植linux3.4.2内核之内核框架介绍及简单修改

    文章目录 uboot启动内核分析 简单配置内核 编译内核 设置机器ID 修改晶振 移植Linux3.4.2内核其他文章链接: S3C2440移植linux3.4.2内核之内核框架介绍及简单修改 S3C ...

  3. 【移植Linux 3.4.2内核第三步】从0制作支持新内核的文件系统

    学习交流加 个人qq: 1126137994 个人微信: liu1126137994 学习交流资源分享qq群: 962535112 上一篇文章,我们修改了内核代码改了系统的分区,但是最后启动,发现虽然 ...

  4. 移植Linux 3.4.2内核到JZ2440开发板(超精讲)

    Linux 3.4.2内核移植到JZ2440开发板 0.开发环境 虚拟机:VMware workstation 16 pro 宿主机操作系统:Ubuntu 16.04 开发板:JZ2440 移植内核版 ...

  5. Python 爬取网页信息并保存到本地爬虫爬取网页第一步【简单易懂,注释超级全,代码可以直接运行】

    Python 爬取网页信息并保存到本地[简单易懂,代码可以直接运行] 功能:给出一个关键词,根据关键词爬取程序,这是爬虫爬取网页的第一步 步骤: 1.确定url 2.确定请求头 3.发送请求 4.写入 ...

  6. 【移植Linux 3.4.2内核之四】修改内核代码支持YAFFS文件系统

    上一篇文章,我们从0制作jffs2文件系统,因为我们的内核本身就支持iffs2文件系统,但是它不支持yaffs文件系统.今天我们就来修改内核代码,让内核支持yaffs文件系统的格式. 1.首先我们获取 ...

  7. linux内存管理之uboot第一步

    在进入讲解linux内存管理的kernel阶段以前,了解一下uboot阶段是如何准备好内存物理设备的,这是非常有意义的.通常进入到linux内核阶段之后,对内存芯片的物理特性寄存器访问是比较少的,强调 ...

  8. Linux内核移植笔记 | 02 - 移植Linux 3.4.2 内核到JZ2440(修改内核中的mtd分区)

    1. 问题 在上一节Linux系统启动之后,打印出的分区表如图: 和实际对nand flash的分区表不一致,实际上在uboot移植教程(08 - 移植uboot 2012.04到JZ2440(设置m ...

  9. linux 3.4内核初始化,S3C2440移植linux3.4.2内核之内核框架介绍及简单修改

    @[TOC] uboot启动内核分析 进入cmd_bootm.c,找到对应的bootm命令对应的do_bootm():int do_bootm(cmd_tbl_t *cmdtp, int flag, ...

最新文章

  1. 005-Python之列表,元组,字符串,bytes及bytearray共有操作
  2. 技术深扒丨没点想象力都看不透这个网站的反爬措施!
  3. 如何处理SAP OData错误消息: Invalid parametertype used at function XXXX
  4. 英伟达最大gpu_英伟达正式发布Ampere架构GPU,完成史上最大性能飞跃
  5. C++--day05
  6. 【CodeForces - 1084D】The Fair Nut and the Best Path (树形dp)
  7. 对数周期天线hfss建模_HFSS也有金手指,FADDM招式详解
  8. POJ 3268 Bookshelf 2 动态规划法题解
  9. funuiTitle-居中问题修改
  10. C语言中你可能会用到的字符串函数的代码
  11. 数据库、模式、表的关系(转载)
  12. 服务器无线通信方案,无线数据传输模块组网及功能
  13. 游戏建模中游戏人物设计要点是什么?
  14. 贝壳金服 TiDB 在线跨机房迁移实践
  15. 大文件打包压缩成的几个小文件怎么解压?
  16. 工装,夹具,治具,检具
  17. MIPI、DSI、CSI、D-PHY的简要介绍
  18. 开学季数码好物推荐,大学必备数码产品选购清单
  19. Linux核心命令汇总(思维导图+实例讲解)
  20. 用深度学习每次得到的结果都不一样,怎么办?

热门文章

  1. Qt中的TableWidget初始化表头、行高、选中、自动扩展和接受修改
  2. 理解CSS3 max/min-content及fit-content等width值
  3. display:table-cell自适应布局下连续单词字符换行
  4. python 合并excel 自动更新_手把手教你4种方法用Python批量实现多Excel多Sheet合并
  5. python中import sys_python import sys出错怎么办
  6. 七、线性表的链式存储结构
  7. 3224: Tyvj 1728 普通平衡树
  8. ajax设置自定义请求头信息
  9. linux下常用FTP命令
  10. android Activity 之间传递复杂对象