移植最新的内核之:修改分区和制作根文件系统
来源:互联网 发布:笔记本mac地址修改 编辑:程序博客网 时间:2024/06/05 07:39
修改分区:
根据内核所打印的信息找到分区所在的文件:
Common-smdk.c (arch\arm\mach-s3c24xx)40892013-5-8
根据bootloader设置的分区来设置kernel:如下所示
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_2M,
},
[3] = {
.name = "rootfs",
.offset = MTDPART_OFS_APPEND,
.size = MTDPART_SIZ_FULL,
}
};
找一个之前的jffs2文件系统(目前内核还不支持jffs2,镜像文件链接:点击打开链接)镜像烧写到rootfs分区,重新启动内核即可。
设置的bootagrs:
bootargs=console=ttySAC0,115200 root=/dev/mtdblock3 rootfstype=jffs2
建立新的根文件系统(busybox下载)
一、编译安装busybox
shanl@shanl-Aspire-4740:~/Linux$ tar -xvf busybox-1.20.0.tar.bz2
make menuconfig修改交叉工具链(使用"\"来进行搜索):
│ Location: │
│ -> Busybox Settings │
│ -> Build Options
保存退出,
编译:make
安装:shanl@shanl-Aspire-4740:~/Linux/busybox-1.20.0$ make install CONFIG_PREFIX=../busybox
二、安装库文件:
1.找到编译器的安装路径:
shanl@shanl-Aspire-4740:~/Linux/busybox$ echo $PATH
/home/shanl/env/jdk1.6.0_37/bin:/home/shanl/bin:/home/shanl/env/usr/local/arm/4.3.2/bin:/home/shanl/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/shanl/Android_Sdk/android-sdk-linux/tools
2.拷贝库文件:
先找下库:
shanl@shanl-Aspire-4740:~/env/usr/local/arm/4.3.2$ find . -name "lib"
./arm-none-linux-gnueabi/libc/usr/lib
./arm-none-linux-gnueabi/libc/thumb2/usr/lib
./arm-none-linux-gnueabi/libc/thumb2/lib
./arm-none-linux-gnueabi/libc/armv4t/usr/lib
./arm-none-linux-gnueabi/libc/armv4t/lib
./arm-none-linux-gnueabi/libc/lib
./arm-none-linux-gnueabi/lib
./lib
使用上面加亮的库即可:
shanl@shanl-Aspire-4740:~/Linux/busybox$ mkdir -p usr/lib
shanl@shanl-Aspire-4740:~/Linux/busybox$ mkdir lib
shanl@shanl-Aspire-4740:~/env/usr/local/arm/4.3.2$ cp ./arm-none-linux-gnueabi/libc/armv4t/lib/*so* ~/Linux/busybox/lib/-d
shanl@shanl-Aspire-4740:~/env/usr/local/arm/4.3.2$ cp ./arm-none-linux-gnueabi/libc/armv4t/usr/lib/*so* ~/Linux/busybox/usr/lib/-d
-d的意思:原来是链接文件,也当链接文件拷贝
3.构造etc,dev目录(链接:)
shanl@shanl-Aspire-4740:~/Linux/busybox$ mkdir dev
shanl@shanl-Aspire-4740:~/Linux/busybox$ ls -l /dev/console /dev/null
crw------- 1 root root 5, 1 5月 8 13:34 /dev/console
crw-rw-rw- 1 root root 1, 3 5月 8 13:33 /dev/null
shanl@shanl-Aspire-4740:~/Linux/busybox$ sudo mknod dev/console c 5 1
[sudo] password for shanl:
shanl@shanl-Aspire-4740:~/Linux/busybox$ sudo mknod dev/null c 1 3
4.创建其他目录:
shanl@shanl-Aspire-4740:~/Linux/busybox$ mkdir proc tmp mnt sys root
5.制作jffs2镜像文件:
shanl@shanl-Aspire-4740:~/Linux$ mkfs.jffs2 -n -s 2048 -e 128KiB -d busybox -o busybox.jffs2
有可能需要安装:mtd-utils (执行: sudo apt-get install mtd-utils )
将生成的文件系统镜像烧写到nandflash上:
nand write.jffs2 30000000 260000 $filesize
重新启动内核出现下面的错误:
VFS: Mounted root (jffs2 filesystem) on device 31:3. //这个说明已经挂接上去了 ,执行init应用程序的时候退出了
Freeing init memory: 172K
Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000004
查找代码是由于SIGILL导致(非法指令)
再看看编译器的类型发现是eabi接口,只要内核支持eabi接口(嵌入式应用二进制接口),所以内核需要配置eabi接口
修改内核:
make menuconfig
选中:Use the ARM EABI to compile the kernel
重新编译内核即可
- 移植最新的内核之:修改分区和制作根文件系统
- 内核之修改分区及制作根文件系统
- 05-S3C2440学习之内核(移植)linux3.4.2移植(1)之简单移植+修改MTD分区+制作jffs2文件系统
- 移植内核学习笔记2-----修改分区及制作根文件系统
- Linux内核移植和根文件系统制作
- Linux内核移植和根文件系统制作
- Linux内核移植和根文件系统制作
- Linux内核移植和根文件系统制作
- Linux内核移植和根文件系统制作
- Linux内核移植和根文件系统制作
- Linux内核移植和根文件系统制作
- Linux内核移植和根文件系统制作
- Linux内核移植和根文件系统制作
- Linux内核移植和根文件系统制作
- Linux内核移植和根文件系统制作
- Linux内核移植和根文件系统制作
- Linux内核移植和根文件系统制作
- linux内核移植和根文件系统制作
- sws_scale解出来的RGB图像颠倒问题
- 正则表达式概述
- 百度搜索关键词排名在不同浏览器下排名不同的情况
- 优秀的技术书籍章节开头的名言佳句
- MFC 自定义消息 和 子对话框 父对话框 发送消息
- 移植最新的内核之:修改分区和制作根文件系统
- 再探跳马问题(骑士周游问题)
- 英飞凌
- kendoui - 片段
- linux fuser 程序简介
- WebSocket 通讯(node.js)
- Windows 图形界面演化
- vlc的应用之二:vlc的ActiveX及cab
- linux系统下oracle数据库备份、还原。