2440移植Linux Kernel笔记(一)------编译kernel

你好!这里是风筝的博客,

欢迎和我一起交流。

 


ubuntu版本:16.04

arm-linux-gcc版本:4.4.3

Linux kernel版本:4.4.66

u-boot版本:2016.11

 

祖师爷github:https://github.com/torvalds/linux

Linux Kernel下载地址:
https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.4.66.tar.xz
解压Kernel:
xz -d linux-4.4.66.tar.xz
tar xvf linux-4.4.66.tar
脱壳解压,可以看出外层是xz压缩方式,里层是tar打包方式.


cd linux-4.4.66/arch/arm/configs
ls *2440*
发现只有mini2440
ls *2410*
发现只有s3c2410
因为s3c2410的配置比mini2440的配置支持功能多,因此我们选择s3c2410配置.
cd ../../../
vi Makefile

修改:
ARCH=arm
CROSS_COMPILE?=arm-linux-


在arch/arm/mach-s3c24xx/mach-smdk2440.c的smdk2440_init_time函数里,

16934400改为12000000,否则启动Kernel会出现乱码,因为我们用的是12M的晶振.


cat include/generated/mach-types.h
可以看出我们s3c2440的机器id为362,也就是0x16a,这个我们要记住.

我们在移植uboot的时候写的机器id是193,现在我们知道了s3c2440的机器id是0x16a,所以boot启动时我们要设置为16a.


make s3c2410_defconfig
开始配置s3c2410文件.


make menuconfig
(这条命令会依赖ubuntu上的libncurses库,记得要先安装好这个库:sudo apt-get install libncurses5-dev)
但是这个我们先不修改,默认即可,直接退出保存.


把我们之前编译uboot时生成的mkimage工具复制到/usr/bin:
sudo cp /work/system/u-boot-2016.11/tools/mkimage /usr/bin/


make uImage
生成的uImage在arch/arm/boot/uImage里.
现在我们把uImage放到开发板上启动看能不能启动:
cp arch/arm/boot/uImage /work/nfs
因为我们的uImage有3M大,而uboot里kernel分区只划分了2M大小,所以我们用nfs从服务器上启动kernel.


在开发板uboot界面:
set machid 16a
save
nfs 32000000 192.168.1.106:/work/nfs/uImage
bootm 32000000
发现Kernel可以正常启动了,但是分区不对,kernel默认分区是:Boot Agent等.所以现在我们来修改分区:
grep "\"Boot Agent\"" * -nR
发现:
arch/arm/mach-s3c24xx/common-smdk.c:114:                .name   = "Boot Agent"


所以我们修改common-smdk.c的114行所在的smdk_default_nand_part数组:
static struct mtd_partition smdk_default_nand_part[] = {
[0] = {
.name = "bootloader",
.size = SZ_512K,
.offset = 0,
},
[1] = {
.name = "params",
.offset = MTDPART_OFS_APPEND,
.size = SZ_128K,
},
[2] = {
.name = "kernel",
.offset = MTDPART_OFS_APPEND,
.size = SZ_4M,
},
[3] = {
.name = "rootfs",
.offset = MTDPART_OFS_APPEND,
.size = MTDPART_SIZ_FULL,
}
};


至此,Kernel能正常启动,现在我们就来制作根文件.


--------------------------------------------
后记:

发现一个可以在线看Linux源码的网站:https://elixir.bootlin.com/linux/latest/source

不仅支持Linux,uboot、qemu等也支持






 

 

 

 

 

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值