【移植Linux 3.4.2内核第一步】之简单修改
前一阵子已经将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内核第一步】之简单修改相关推荐
- 【移植Linux 3.4.2内核第二步】之修改系统分区
今天接着移植Linux 3.4.2内核,接着上一篇文章(点击查看:上一篇文章)我们完成了内核的串口启动打印输出,但是无法挂载根文件系统,我们看看启动后显示的是什么: 从打印结构可以看出,我们的分区不对 ...
- S3C2440移植linux3.4.2内核之内核框架介绍及简单修改
文章目录 uboot启动内核分析 简单配置内核 编译内核 设置机器ID 修改晶振 移植Linux3.4.2内核其他文章链接: S3C2440移植linux3.4.2内核之内核框架介绍及简单修改 S3C ...
- 【移植Linux 3.4.2内核第三步】从0制作支持新内核的文件系统
学习交流加 个人qq: 1126137994 个人微信: liu1126137994 学习交流资源分享qq群: 962535112 上一篇文章,我们修改了内核代码改了系统的分区,但是最后启动,发现虽然 ...
- 移植Linux 3.4.2内核到JZ2440开发板(超精讲)
Linux 3.4.2内核移植到JZ2440开发板 0.开发环境 虚拟机:VMware workstation 16 pro 宿主机操作系统:Ubuntu 16.04 开发板:JZ2440 移植内核版 ...
- Python 爬取网页信息并保存到本地爬虫爬取网页第一步【简单易懂,注释超级全,代码可以直接运行】
Python 爬取网页信息并保存到本地[简单易懂,代码可以直接运行] 功能:给出一个关键词,根据关键词爬取程序,这是爬虫爬取网页的第一步 步骤: 1.确定url 2.确定请求头 3.发送请求 4.写入 ...
- 【移植Linux 3.4.2内核之四】修改内核代码支持YAFFS文件系统
上一篇文章,我们从0制作jffs2文件系统,因为我们的内核本身就支持iffs2文件系统,但是它不支持yaffs文件系统.今天我们就来修改内核代码,让内核支持yaffs文件系统的格式. 1.首先我们获取 ...
- linux内存管理之uboot第一步
在进入讲解linux内存管理的kernel阶段以前,了解一下uboot阶段是如何准备好内存物理设备的,这是非常有意义的.通常进入到linux内核阶段之后,对内存芯片的物理特性寄存器访问是比较少的,强调 ...
- Linux内核移植笔记 | 02 - 移植Linux 3.4.2 内核到JZ2440(修改内核中的mtd分区)
1. 问题 在上一节Linux系统启动之后,打印出的分区表如图: 和实际对nand flash的分区表不一致,实际上在uboot移植教程(08 - 移植uboot 2012.04到JZ2440(设置m ...
- linux 3.4内核初始化,S3C2440移植linux3.4.2内核之内核框架介绍及简单修改
@[TOC] uboot启动内核分析 进入cmd_bootm.c,找到对应的bootm命令对应的do_bootm():int do_bootm(cmd_tbl_t *cmdtp, int flag, ...
最新文章
- 005-Python之列表,元组,字符串,bytes及bytearray共有操作
- 技术深扒丨没点想象力都看不透这个网站的反爬措施!
- 如何处理SAP OData错误消息: Invalid parametertype used at function XXXX
- 英伟达最大gpu_英伟达正式发布Ampere架构GPU,完成史上最大性能飞跃
- C++--day05
- 【CodeForces - 1084D】The Fair Nut and the Best Path (树形dp)
- 对数周期天线hfss建模_HFSS也有金手指,FADDM招式详解
- POJ 3268 Bookshelf 2 动态规划法题解
- funuiTitle-居中问题修改
- C语言中你可能会用到的字符串函数的代码
- 数据库、模式、表的关系(转载)
- 服务器无线通信方案,无线数据传输模块组网及功能
- 游戏建模中游戏人物设计要点是什么?
- 贝壳金服 TiDB 在线跨机房迁移实践
- 大文件打包压缩成的几个小文件怎么解压?
- 工装,夹具,治具,检具
- MIPI、DSI、CSI、D-PHY的简要介绍
- 开学季数码好物推荐,大学必备数码产品选购清单
- Linux核心命令汇总(思维导图+实例讲解)
- 用深度学习每次得到的结果都不一样,怎么办?
热门文章
- Qt中的TableWidget初始化表头、行高、选中、自动扩展和接受修改
- 理解CSS3 max/min-content及fit-content等width值
- display:table-cell自适应布局下连续单词字符换行
- python 合并excel 自动更新_手把手教你4种方法用Python批量实现多Excel多Sheet合并
- python中import sys_python import sys出错怎么办
- 七、线性表的链式存储结构
- 3224: Tyvj 1728 普通平衡树
- ajax设置自定义请求头信息
- linux下常用FTP命令
- android Activity 之间传递复杂对象