在JZ2440的基础上 移植linux2.6.39 编译器gcc4.3.2 Ubuntu16.04
一.uboot
1.解压缩 tar xjf u-boot-1.1.6.tar.bz2
2.cd u-boot-1.1.6
3.打补丁 patch -p1 < ../u-boot-1.1.6_jz2440.patch 打完补丁就把uboot修改成板子适配的了
补丁中做了有关nand驱动、网卡驱动等等,PDF上有细说
4.配置 make 100ask24x0_config
5.修改 u-boot-1.1.6/include/configs/100ask24x0.h
主要是内核编译后大于2M,这里需要将NAND修改分区
(1)#define MTDPARTS_DEFAULT "mtdparts=nandflash0:512k@0(bootloader)," \
"512k(params)," \
"4m(kernel)," \
"-(root)"
(2)#define CONFIG_BOOTARGS "noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0,115200"
/dev/mtdblock3 3是指linux内核 MTD分区第四个分区
(3)#define CONFIG_BOOTCOMMAND "nand read.jffs2 0x30107FC0 kernel; bootm 0x 30107FC0"
这里根据实际编译出来的uImage修改
(4)网络配置
#define CONFIG_IPADDR 192.168.0.99
#define CONFIG_SERVERIP 192.168.0.104
6.编译 make u-boot.bin
编译完uboot后tools文件夹下会生成mkimage 它是制作内核uImage 的工具
sudo cp tools/mkimage /usr/local/bin
7.烧写 u-boot.bin 至NAND 或者 nor
oflash u-boot.bin
二.内核
1.make s3c2410_defconfig
2.make menuconfig
开启 EABI
Kernel Configuration
[*] Use the ARM EABI to compile the kernel
[*] Allow old ABI binaries to run with this kernel (EXPERIMENTA
3.yaffs2补丁支持
./patch-ker.sh c ~/linuxkernel/linux-2.6.39
(1)修改了fs/Kconfig 末尾添加
#Patched by YAFFS
source "fs/yaffs/Kconfig"
(2)修改了fs/Makefile 末尾添加
#Patched by YAFFS
obj-$(CONFIG_YAFFS_FS) += yaffs2/
(3)创建fs/yaffs2 目录 复制Makefile.kernel -> fs/yaffs2/Makefile , Kconfig ->fs/yaffs2/Kconfig
复制*.c *.h 到fs/yaffs2/下
4.make menuconfig 修改支持yaffs2
File system--->
[*]Miscellaneous filesystems --->
[*]yaffs2 file system support
默认配置即可
5.修改arch/arm/plat-s3c24xx/common-smdk.c 至少使得文件系统位置和uboot的root分区一致
static struct mtd_partition smdk_default_nand_part[] = {
[0] = {
.name = "bootloader",
.size = 0x40000,
.offset = 0,
},
[1] = {
.name = "params",
.size = 0x20000,
.offset = 0x40000,
},
[2] = {
.name = "kernel",
.size = SZ_4M,
.offset = 0x60000,
},
[3] = {
.name = "yaffs",
.offset = SZ_4M+0x60000,
.size = MTDPART_SIZ_FULL,
}
};
5.修改arch/arm/mach-s3c2440/mach-smdk2440.c
//s3c24xx_init_clocks(16934400);
s3c24xx_init_clocks(12000000);
6.make uImage
三.文件系统
官网下载busybox-1.21.1
1.Makefile 修改
190 ARCH ?= arm
164 CROSS_COMPILE ?=arm-linux-
2.编译
make menuconfig 全部默认
make
3.安装
mkdir ../fs_1.21.1
make CONFIG_PREFIX=../fs_1.21.1 install
后 ../fs_1.21.1 会出现 bin linuxrc sbin usr
4.制作镜像
(1)打包工具制作
yaffs_source_util_larger_small_page_nand.tar.bz2(网盘提供)解压得到Development_util_ok
进入Development_util_ok/yaffs2/utils$
make
把生成的 mkyaffs2image 复制到 /usr/local/bin 下
(2)继续文件系统制作
回到~/jz2440/busybox/fs_1.21.1$创建文件夹
bin dev etc lib linuxrc mnt proc root sbin sys tmp usr
~/jz2440/busybox/fs_1.21.1/dev$ sudo mknod console c 1 5
~/jz2440/busybox/fs_1.21.1/dev$ sudo mknod null c 3 1
~/jz2440/busybox/fs_1.21.1$ vim etc/fstab
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0
~/jz2440/busybox/fs_1.21.1$ vim etc/inittab
# /etc/inittab
::sysinit:/etc/init.d/rcS
ttySAC0::askfirst:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
mkdir etc/init.d
~/jz2440/busybox/fs_1.21.1$ vim etc/init.d/rcS
#mount -t proc none /proc
#ifconfig eth0 192.168.0.99
mount -a
mkdir /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
libc库复制
~/jz2440/busybox/fs_1.21.1/lib$ cp /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib/*.so* . -d
~/jz2440/busybox/fs_1.21.1/lib$ cp cp /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/lib/*.so* . -d
(3)打包
~/jz2440/busybox$ mkyaffs2image fs_1.21.1 fs_1.21.1.yaffs2
四.下载uboot OPENJATG下载
五.下载uImage 到norflash
同光盘步骤
六.下载kernel (ubuntu需要设置好TFTP,板子uboot设置ipaddr serverip) 也可以USB下载
tftp 0x32000000 uImage
nand erase 0 0x10000000 全片擦除
nand write.jffs2 0x60000 $(filesize)
七.下载yaffs2 也可以USB下载
tftp 0x30000000 fs_mini.yaffs2
nand write.jffs2 0x460000 $(filesize)