【移植Linux 3.4.2内核第一步】之简单修改
2018-01-18 01:00
399 查看
前一阵子已经将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
找到下面这句话:
改为:
这里需要注意一点,交叉编译工具,我这里用的是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中的
改为:
然后重新编译内核,挂载内核:
nfs 32000000 192.168.1.101:/work/nfs_root/uImage_new
bootm 32000000
终于,我们的打印的是正常的字符了,但是内核还没有真正启动,还是有一些错误,今天就不写了,放到下一篇文章中继续解决。
想一起探讨以及获得各种学习资源加我(有我博客中写的代码的原稿):
qq:1126137994
微信:liu1126137994
可以共同交流关于嵌入式,操作系统,C++语言,C语言,数据结构等技术问题。
想看之前移植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语言,数据结构等技术问题。
相关文章推荐
- 05-S3C2440学习之内核(移植)linux3.4.2移植(1)之简单移植+修改MTD分区+制作jffs2文件系统
- 【移植Linux 3.4.2内核第二步】之修改系统分区
- 【移植Linux 3.4.2内核之四】修改内核代码支持YAFFS文件系统
- 05-S3C2440学习之内核(移植)linux3.4.2移植(3)之支持DM9000C网卡及修改支持串口2
- 【移植驱动到Linux3.4.2内核之一】移植DM9000C网卡驱动
- ARM-Linux 内核移植--基于FL2440开发板(修改为Linux单系统)
- Linux-4.9.2内核在mini2440上的移植(四)——修改Nand Flash分区表
- 简单linux内核的移植实现ftp服务
- FL2440移植LINUX-3.4.2 (七)--驱动移植LCD(移植自己写的和移植内核自带的)
- linux-3.4.2移植到FL2440上(二)--修改MTD分区
- 移植vivi引导linux2.6.14.7内核修改的地方
- ARM-Linux 内核移植--基于FL2440开发板(修改为Linux单系统)
- s5pv210 linux3.8.3内核移植之三:简单根文件系统制作
- 05-S3C2440学习之内核(移植)linux3.4.2移植(2)之yffs2文件系统移植+内核裁剪+内核制作补丁
- 05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动
- linux-3.4.2内核移植
- S3c6410 linux内核移植(9)---添加adc驱动、电池电量检测之文件修改
- Linux-4.9.2内核在mini2440上的移植(六)——修改MD9000驱动
- 基于S3C2440的Linux内核移植和yaffs2文件系统制作--修改Linux源码参数
- FL2440移植LINUX-3.4.2 -- 内核自带的触摸屏驱动移植