jz2440上內核和文件系統移植


整個暑假跟着韋東山的視頻和書籍移植了linux2.3.6到jz2440,現在自己嘗試移植linux4.7.2到板子上,並使用ubifs文件系統代替舊的jffs2文件系統。
 
下載交叉編譯工具鏈
工具鏈我使用的是friendlyARM提供的工具鏈,因為韋東山教程提供的工具鏈比較舊不能編譯較新的linux內核,也可以自己使用crosstool-ng構建。
ARM-Linux GCC 4.4.3(http://arm9download.cncncn.com/mini2440/linux/arm-linux-gcc-4.4.3-20100728.tar.gz)
 
下載源碼
下載linux4.7.2的源碼
Linux4.7.2(https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.7.2.tar.xz)
 
修改編譯燒寫uboot
uboot還是使用了有韋東山提供的uboot1.1.6,這里我修改了一下uboot的分區
打開打好韋東山提供的uboot補丁的uboot目錄。打開/include/configs/100ask24x0.h,修改代碼57行如下:
#define MTDPARTS_DEFAULT "mtdparts=nandflash0:256k@0(bootloader)," \
"128k(params)," \
"8m(kernel)," \
"-(rootfs)"
這里把nandflash分成4個分區,kernel存放系統內核uImage,rootfs存放ubifs文件系統。最后make生成u-boot.bin,燒寫進norflash里。
注意:這里的uboot是1.1.6比較舊所以不可以使用arm-linux-gcc4.4.3來編譯,所以我這里換成使用韋東山提供的工具中的3.4.5來編譯。
 
修改編譯燒寫內核
解壓linux4.7.2.tar.xz並進入目錄
make s3c2410_defconfig
make menuconfig
進入【Device Drivers】--->
Memory Technology Device (MTD) support --->
<*>Enable UBI
進入 【File System】--->
Miscellaneous filesustems --->
<*>UBIFS file system
進入  【Kernel Features】--->
[*] Use the ARM EABI to compile the kernel
[*]   Allow old ABI binaries to run with this kernel (EXPERIMENTAL)
修改./arch/arm/mach-s3c24xx/common-smdk.c中的smdk_default_nand_part[]結構體數組
static struct mtd_partition smdk_default_nand_part[] = {
[0] = {
.name   = "bootloader",
.size   = SZ_256K,
.offset = 0,
},
[1] = {
.name   = "params",
.offset = MTDPART_OFS_APPEND,
.size   = SZ_128K,
},
[2] = {
.name   = "kernel",
.offset = MTDPART_OFS_APPEND,
.size   = SZ_8M,
},
[3] = {
.name   = "rootfs",
.offset = MTDPART_OFS_APPEND,
.size   = MTDPART_SIZ_FULL,
}
};
修改./arch/arm/mach-s3c24xx/mach-smdk2440.c中的smdk2440_init_time(void)函數
static void __init smdk2440_init_time(void)
{
s3c2440_init_clocks(12000000);//板子的晶振是12M
samsung_timer_init();
}
修改makeflie的第255和256行
ARCH        ?= arm
CROSS_COMPILE   ?= arm-linux-
最后make uImage,在/arch/arm/boot下生成uImage
啟動jz2440,進入uboot
set bootargs console=ttySAC0,115200 root=/dev/mtdblock3
set bootcmd 'nboot 0x32000000 kernel; bootm 0x32000000'
set ipaddr 192.168.199.148      #根據自己修改
set serverip 192.168.199.146    #根據自己修改
save
tftp 0x30000000 uImage
nand erase
nand write.jffs2 0x30000000 kernel $(filesize)
reset
如果系統啟動成功則會最后顯示類似end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-bl,則證明系統啟動成功,下面就是制作根文件系統了。
 
制作根文件系統
這里我采用ubifs文件系統,具體優缺點自己搜索
首先下載busybox,我這里用的版本是1.20.0
cd busybox1.20.0
make menconfig
Busybox Settings -->
Build options -->
Cross Compiler prefix
填arm-linux-
Build Options --->
[*]Build BusyBox as a static binary (no shared libs)
make
make CONFIG_PREFIX=~/2440/ubifs install
cd '/home/zzm/arm/opt/FriendlyARM/toolschain/4.4.3/lib'
cp *.so.* ~/2440/ubifs/lib -d
cd ~/2440/ubifs
cp -r ~/2440/busybox-1.20.0/examples/bootfloppy/etc ./ 
vim inittab
內容如下:
::sysinit:/etc/init.d/rcS
console::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount -a -r
::shutdown:/bin/umount -a -r
vim fstab
內容如下:
proc        /proc   proc    defaults    0   0
tmpfs       /tmp    tmpfs   defaults    0   0
sysfs       /sys    sysfs   defaults    0   0
tmpfs       /dev    tmpfs   defaults    0   0
vim init.d/rcS
內容如下:
#! /bin/sh
mount -a
mkdir /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
cd ~/2440/ubifs
mkdir dev
cd dev
sudo mknod null c 1 3
sudo mknod console c 5 1
cd ..
mkdir proc mnt tmp sys root home
cd ..
mkfs.ubifs -r ubifs -m 2048 -e 129024 -c 105 -o fs_jz2440.img#129024*105=13MB
vim ubinize.cfg
[ubifs]
mode=ubi
image=fs_jz2440.img
vol_id=0
vol_size=13MiB 
vol_type=dynamic
vol_name=root
vol_flags=autoresize
ubinize -o ubi.img -m 2048 -p 128KiB -s 512 ubinize.cfg
生成ubi.img
最后燒寫:
tftp 0x30000000 ubi.img
nand erase root
nand write.i 0x30000000 root $(filesize)
bootargs=console=ttySAC0,115200 ubi.mtd=3 root=ubi0:root rootfstype=ubifs
set bootcmd 'nboot 0x32000000 kernel; bootm 0x32000000'
save
reset


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM