FL2440 Linux kernel + yaffs2根文件移植过程(二)

【HDLBits实战】从真值表到最优电路:SOP与POS形式在ECE241考题中的精妙应用 本文以HDLBits平台上的ECE241考题为例,详细讲解了如何从真值表出发,利用卡诺图化简技术,推导出最优的积之和(SOP)与和之积(POS)逻辑表达式。文章重点剖析了如何处理“无关项”以简化电路,并通过Verilog代码实现对比,阐述了SOP与POS形式在数字电路设计中的精妙应用与实战价值。 阅读详情

上一篇文章中Kernel移植基本上没有什么大的问题,除了几处需要更改外(已经注明)

make zImage后,内核生成成功,下面是关于yaffs2根文件的移植,移植过程蜿蜒曲折,现现将成功移植过程讲解,后附过程与问题。

一、移植过程(成功)

busybox-1.19.4

cross3.4.1(FL2440关盘里的交叉编译器)

1. 下载busybox-1.19.4.tar.bz2,地址是 http://busybox.net/downloads

     下载busybox-1.19.4-udhcp.patch,cd busybox-1.19.4

     patch -p0<../busybox-1.19.4-udhcp.patch

2. 修改Makefile

CROSS_COMPILE ?=

 ARCH ?=

改后的值为

CROSS_COMPILE ?=/FL2440/usr/local/arm/3.4.1/bin/arm-linux-

ARCH ?=arm

 

3. make menuconfig

Busybox Settings --->  Build Options --->          

                                                                                •  Build Busybox as a static binary(no shared libs)        

                                                                                  •  Build with Large File Support (for accessing files > 2GB) 

                                    Installation Options --->       (./_install) Busybox installation prefix   <—进入这个选项,输入busybox的安装路径,如:../rootfs 

                                    Busybox Library Tuning --->  

                                                                    •  vi-style line editing commands 

                                                                   •  Fancy shell prompts  <—要选择这个选项:“Fancy shell prompts”,否则挂载文件系统后,无法正常显示命令提示符:“[\u@\h \W]#

4.  Coreutils --->下找到ls相关的          Allow use of color to identify file types 和     Produce colored ls output by default,

     Busybox Settings--------------à Busybox Library Tuning------à Tab completion

5. sudo make
出现问题了:

1).miscutils/ionice.c:16: error: 'SYS_ioprio_set' undeclared (first use in> this function)

解决方法:
在busybox应用里关闭 ionice 选项
$  make meunconfig 
选择下面的菜单:
Miscellaneous Utilities  --->    
 [ * ] ionice
按空格去掉这个选项
 
2).
miscutils/ubi_tools.c:63:26: mtd/ubi-user.h: No such file or directory
miscutils/ubi_tools.c: In function `ubi_tools_main':
miscutils/ubi_tools.c:133: error: `UBI_DEV_NUM_AUTO' undeclared (first use in this function)
解决办法:
在include下新建mtd目录,从linux-2.6.28.7/include/mtd拷贝文件ubi-user.h到该目录下
 
3).
networking/interface.c:806: error: `ARPHRD_INFINIBAND' undeclared here (not in a function)
networking/interface.c:806: error: initializer element is not constant
networking/interface.c:806: error: (near initialization for `ib_hwtype.type')
在文件interface.c中加入如下语句
#define ARPHRD_INFINIBAND 32            /* InfiniBand                   */
这个是从文件include/linux/if_arp.h中得到
 
4).
......parse error before '_u16'
......parse error before 'jk'
......parse error before k
networking/udhcp/dhcpc.c: In function `udhcp_raw_socket':
networking/udhcp/dhcpc.c:821: error: elements of array `filter_instr' have incomplete type
 
搜了一下百度,网上最多的解决方法是把networking都干掉,我根据提示,改了一下,将/FL2440/usr/local/arm/3.4.1/arm-linux/sys-include/llinux/filter.h中的sock_filter类型的定义改成了
struct sock_filter /* Filter block */
{
        unsigned short code;   /* Actual filter code */    原来为__u16
        unsigned char jt; /* Jump true */                     
        unsigned char jf; /* Jump false */
        unsigned int k;      /* Generic multiuse field */
};
或者直接添加头文件 #include <linux/types.h>
 
5).
/opt/arm/3.4.1/bin/../lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/percpu.h:45: error: `GFP_KERNEL' undeclared (first use in this function)
/opt/arm/3.4.1/bin/../lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/percpu.h:45: error: (Each undeclared identifier is reported only once
/opt/arm/3.4.1/bin/../lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/percpu.h:45: error: for each function it appears in.)
In file included from /opt/arm/3.4.1/bin/../lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/ext2_fs.h:20,
 
网上建议的解决方法是:
去掉
Linux System Utilities  --->
[ ] mkfs_ext2   
[ ] mkfs_vfat
 
我没有采纳,在percpu.h中定义了#define GFP_KERNEL 0     (改值参考内核代码)
后面又出现了类似4中的问题,估计是u16,u32等类型未定义无法识别造成的parse error before..错误,用类似方法得以解决,不必采用极端的注释掉的方法。
当然,最为理想的是包含头文件#include <linux/types.h>
6).
出错:linux/ext2_fs_sb.h中342行出现的void __usr *data无法识别,添加头文件#include <linux/compiler.h>
 
6. make install
busybox-1.19.4目录下的_install中有我们需要的文件。
mkdir rootfs
cd rootfs
mkdir bin etc dev home lib mnt opt proc root sbin sys tmp usr var
cp -r _install/* .
rm linuxrc   删掉linuxrc
 
7. 制作各种文件
linuxrc:
        rm linuxrc
        gedit linuxrc
        linux文件的内容为:
       #!/bin/sh
      echo "testing" #用于测试
       /bin/mount -t proc proc /proc
      /bin/mount -t sysfs sysfs /sys
      /sbin/mdev -s
      exec /sbin/init
  dev/
       cd dev
       mknod console c 5 1
       mknod null c 3 1
            这里简要介绍一下原因。虽然这两个设备文件在内核挂载完文件系统后,系统会利用mdev自动创建,可是在此之前,即在内核挂载文件系统之前,
            init进程会用到这两个设备   文件。如果没有这两个设备文件 ,会提示如下一些信息 Warning: unable to open an initial console
etc/
        cd ../etc
       cp -r /arm/busybox-1.19.4/examples/bootfloppy/etc/* ./ 
        几个必要的文件 inittab fstab   init.d profile
  
        inittab(Linux的init进程是根据/etc/inittab文件来创建其他子进程的。所以我们要修改inittab文件, 内容如下:)
        console::sysinit:/etc/init.d/rcS 
        ttyS0::respawn:-/bin/sh
        s3c2410_serial0::askfirst:-/bin/sh 
        :: once:/usr/sbin/telnetd  -l  /bin/login
 
       修改 fstab文件。改文件是用于控制所要挂载的文件系统。 内容如下: 
       #device  mount-point type  options  dump fsck order
          proc   /proc  proc     defaults    0     0 
         tmpfs  /tmp      tmpfs   defaults     0     0 
         sysfs   /sys      sysfs     defaults     0     0 
         tmpfs   /dev      tmpfs    defaults     0     0 
         var   /dev      tmpfs    defaults     0     0
 
     修改 init.d/rcS文件。这是一个脚本文件,在这里我们可以添加自动执行的命令,常用于配置ip地址,挂载文件系统
        #!/bin/sh 
         PATH=/bin:/sbin:/usr/bin:/usr/sbin 
         runlevel=S 
         prevlevel=N 
        umask  022        
       export  PATH  runlevel  prevlevel 
        mount  -a #挂载fstab文件指定的文件系统
         mkdir  /dev/pts  #
        mount  -t  devpts  devpts  /dev/pts #devpts用于支持外部网络连接(telnet)的虚拟终端
      echo  /sbin/mdev  >  /proc/sys/kernel/hotplug  #设置内核,当有设备插拔时调用/sbin/mdev程序
      mdev  -s  #在/dev目录下生成内核支持的所有设备的结点
     mkdir  -p  /var/lock 
     # qtopia & #启动qtopia脚本
      ifconfig eth0 192.168.0.15 up #配置ip地址 
       /bin/hostname  -F  /etc/sysconfig/HOSTNAME 
 
     profile 文件(环境变量):
        # Ash  profile 
       # vim:  syntax=sh 
       # No  core  files  by  default
       #ulimit  -S  -c  0  >  /dev/null  2>&1 
       USER="`id  -un`" 
        LOGNAME=$USER 
        PS1='[\u@\h  \W]# '    #用于显示[root@FL2440 /]# PATH=$PATH 
        HOSTNAME=`/bin/hostname` 
        echo  " Processing  /etc/profile... " 
        echo  "Done" 
        export  USER  LOGNAME  PS1  PATH
        echo  " Processing  /etc/profile... " 
        echo  "Done"  export  USER  LOGNAME  PS1  PATH
     拷贝到 passwd、 group、 shadow当前目录下。 
        # cp  /etc/passwd  ./ 
       # cp  /etc/group  ./ 
       # cp  /etc/shadow  ./ 
       把passwd文件中的第一行:root:x:0:0:root:/root:/bin/bash中的/bin/bash,改成/bin/ash,因为文件系统的bin目录下没有bash这个命令,而是用ash代替bash,所以在用用户名密码登录的时候(如telnet),会出现“cannot run /bin/bash: No such fileor directory”的错误
 
      新建 sysconfig文件夹,在里面新建 HOSTNAME文件,内容为:FL2440 这里之所以创建该文件和相关内容,是为了在开机启动后,在控制台中可以看到类似的信息
8. 拷贝库文件:
     cd lib
    cp  -f  -a  /usr/local/arm/3.4.1/arm-inux-/lib/.so*  ./
    rm –f libwv*  libuniconf*   这两个库文件一般很少用到,并且占用的大约8M的空间,为了节省内存,所以删掉。
9.  cd ../..    到达busybox-1.19.4目录下
     chmod 777 rootfs/*
     ./mkyaff2image  rootfs rootfs.bin
生成跟文件系统
 
以上根文件系统没有包括触摸屏和Qt,移植后可以进入串口虚拟终端控制设备。
 
在这个过程中,开始我使用的是4.3.2版本的交叉编译器,
结果出现:
VFS: Mounted root (yaffs filesystem).
Freeing init memory: 116K
Kernel panic - not syncing: Attempted to kill init!
 
         网上查询了很多资料,问了很多问题,有说需要在kernel中添加EABI选项的,也有说在busybox编译的时候加上gcc -march=armv4t的,也怀疑过是不是交叉编译器4.3.2版本过低改为了4.5.1,以及kernel传递的参数init=/linuxrc问题(上面的打印结果可以排除这个问题,因为VFS应该是已经找到了的),基本上能用到的办法都尝试完了,结果还是没有结果,折腾得不轻啊!!!!
       最后尝试了交叉编译器3.4.1,居然通了(尽管花了较长时间解决busybox的编译问题),有点惊喜,好曲折啊,差点放弃,直接用开发板自带的,不像搞了的。。。。。。
       版本为什么会影响这个,按道理说4.5.1和4.3.2应该向前兼容的啊,太奇怪了,等到后面再研究吧!!!!!
       总算一步一步自己搞了可以跑的根文件系统了,有点佩服自己的毅力!
总结:1. 网上的资料很多,但是真正解决自己问题的有时候还是得自己寻找,在这过程中也可以随便熟悉各种错误类型,有利于总结经验。
            2. 如果其他编译成功的情况下,还有问题,考虑版本问题,缺少动态库等问题。
         
 
    
  
 
 

【OS】AUTOSAR OS系统调用产生Trap的过程详解 AUTOSAR OS系统调用产生Trap的过程详解 阅读详情

相关推荐

最新Win10离线安装.NET Framework 3.5的方法(附离线包2022/3/22)

win10 .net framework 3.5离线安装

别告诉我有Bug 27万+

MTD系列 - linux中yaffs2文件系统挂载

<br />/*<br /> 题记:<br />  上一篇文章《android平台上linux启动时init进程解析init.rc文件分析.txt》中跟踪了nand分区上的yaffs2文件系统在系统初始化时最上层的表现,调用到libc库函数mount()为止。对于我关心的几个分区可以将其罗列一下:<br />  mount(“/dev/block/mtdblock4”,  “/system”,   “yaffs2”, 0          , NULL);<br />  mount(“/dev/bl

zgolee的专栏 1万+

别再用UE5默认材质:用Substance Painter一招提升写实感

今天,我就把这套从模型准备到引擎最终呈现的全流程技巧毫无保留地分享出来,这套方法不仅能让你的作品细节炸裂,更能让你理解次世代PBR(Physically Based Rendering)材质的底层逻辑。

海外旅居设计师,15年设计经验。 1325

关于内核配置选项中没有yaffs2这个选项问题的解决方案

从官方网站http://www.aleph1.co.uk/gitweb?p=yaffs2.git;a=summary下载yaffs2源码,解压后给linux3.6.7打补丁:./patch-ker.sh c m /kernel directory,完后看到fs目录下的Kconfig和Makefile文件都有增加yaffs2相关内容;fs目录下也多了yaffs2文件夹。基本上说明打补丁成功了,接下来

苦行僧 3460

本地部署gradle

在部署CAS构建执行包时,如果按照CAS的官方命令gradlew clean build,如果系统没安装过gradle,这个步骤将会从网上下载gradle,但是进度非常慢,耗时很长。为了更快地完成项目构建,我们可以直接在本地部署好gradle,节省一点时间。

益添的博客 780

别再纠结了!实测罗技Flow、对拷线、微软Mouse without Borders,我的最终选择是...

本文通过实测对比罗技Flow、对拷线和微软Mouse without Borders等多设备控制方案,详细分析了各自的优缺点及适用场景。作者最终选择了对拷线与罗技键鼠的组合方案,为专业用户提供了稳定可靠的多设备协同办公解决方案,特别适合需要频繁传输大文件和跨设备操作的用户。

weixin_33696106的博客 406

linux-4.1.15移植yaffs2 之应用

前段时间写了一篇,yaffs2移植之编译,后续在nand flash和yaffs2的适配过程中又遇到如下问题:这里在多啰嗦几句,如果想要在嵌入式方面有一定的造诣,除了C的基本功,理解linux内核架构,再就是SOC厂商的基于内核架构编写的用户指导手册、源码以及APP开发人员的源代码了。而某些国内的二次开发厂商,我不想多说些什么,对于客户根本没有本着一个负责任的态度。...

hanpca的博客 2792

整车CAN网络错误帧排查方法

本文围绕 CAN 总线错误帧展开,先剖析其产生原因,涵盖物理连接与硬件问题、电磁兼容性问题、总线负载与设计问题及配置问题;再阐述位错误、填充错误等 5 类错误帧类型;接着说明错误帧与总线 BUSOFF 的关系,解析主动 / 被动错误状态及 BUSOFF 的触发与恢复;还结合整车故障案例做实际分析,指出错误帧根源多为线束或控制器问题。最后总结,强调错误帧是 CAN 协议保障高鲁棒性的机制,掌握相关知识助工程师提升 CAN 网络处理能力。

车载网络小D的博客 1247

YAFFS文件系统在嵌入式Linux上的实现

 引言       随着嵌入式技术在各种电子产品中的广泛应用,嵌入式系统中的数据存储和管理已经成为一个重要的研究课题。Flash存储器具有速度快、容量大、成本低等很多优点,因此在嵌入式系统中被广泛用做外存储器件。Flash主要有NOR和NAND两种类型。目前,针对NOR Flash设计的文件系统JFFS/JFFS2在嵌入式系统中已得到广泛的应用;随着NAND作为大容量存储介质的普及,基于NAND闪

DerekYao的专栏 3068

蜻蜓fm爬虫python

本文介绍了一个用于下载蜻蜓FM音频书籍的Python脚本实现。该脚本主要功能包括:1)通过账号密码登录获取认证信息;2)从目标书籍主页提取版本信息;3)获取书籍节目总数和分页信息;4)生成节目下载链接(使用HMAC-MD5加密算法生成请求签名);5)下载音频文件并保存。脚本采用多种反爬措施:设置User-Agent模拟浏览器行为、使用动态时间戳、HMAC-MD5签名验证等,有效规避简单的反爬机制。整个流程包括登录认证、获取书籍信息、生成下载链接和保存音频文件四个步骤,实现自动化批量下载功能。

野猫炫的博客 912

[QMT量化交易小白入门]-四十四、年化收益48%的策略要兼容回测和实盘,将实盘改为定时任务的方式

本专栏主要是介绍QMT的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写100篇左右。QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步。

木头大左的博客 1373

linux下3.4.1交叉编译器编译busybox-1.20.2

一、移植:busybox-1.20.0并且使用strace解决问题 1、到官网下载:http://www.busybox.net/downloads/ 2、解压:tarxvf busybox-1.20.0.tar.bz2 3、配置:cd busybox-1.20.0                 make menuconfig 4、配置选项添加交叉编译工具:arm-linux- Bu

zailushangha的专栏 7712

vue支付项目-APP支付宝支付功能

如果用户已安装支付宝客户端,商家 App 唤起支付宝完成支付,支付完后跳回到商家 App 内,最后展示支付结果。如果用户没有安装支付宝客户端,商家 App 内会调起支付宝网页支付收银台,用户登录支付宝账号,支付完后展示支付结果。1.点击按钮开通或者续费,会验证是否选择会员商品以及对协议是否查看选中(这里根据项目需要自行验证,可忽略),验证通过打开选择支付方式弹窗页面,选择微信支付或者支付宝支付;4.可取消支付,放弃支付会返回会员页面,页面提示支付取消;1.判断支付方式,如果是2,则是支付宝支付方式。

总结前端开发中遇到的问题,分享前端知识 1万+

FL2440 Linux kernel + yaffs2根文件移植过程(一)

本文全过程为自己亲自试验,其中经历了很多挫折,但功夫不负有心人,终于在自己的努力下(当然也要感谢写博客的朋友们)成功移植了一个最基本功能的Kernel、根文件系统,现在将这个一耗时、耗精力 的过程写下来,希望对遇到相同问题的朋友们有所帮助! 平台:飞凌FL2440             windows xp sp2             vmware 7.0.0 build-20373

6921

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

FL2440移植Linux2.6.33.7内核

kernel version:2.6.33.7 /linux-2.6.33.7 OS:CentOS 6.4 cross-compilation chain:arm-linux-4.3.2 /usr/local/arm/4.3.2/bin 第一步:修改配置 (1)选择合适的内核代码,作为硬件参考目标平台 arch/arm/mach-s3c2440 内核版本支持s3c2440...

weixin_30492601的博客 185

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

支持v4l2 linux内核选项 s3c2440,linux内核移植-移植2.6.35.4内核到s3c2440

原标题:linux内核移植-移植2.6.35.4内核到s3c2440硬件平台:FL2440主机平台:Ubuntu 11.04交叉编译器: - -gcc 4.3.2原创作品,转载请标明出处http://blog.youkuaiyun.com/yming0221/article/details/6604616本来是想移植最新的内核2.6.39但是总是在编译快完成的时候报错,有人说是新的内核对arm平台的支持不好,...

weixin_35763513的博客 395

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

linux kernel 2.6.32 在FL2440 上移植

第一,移植准备: 1.从www.kernel.org 上下载你所需的内核版本,比如我下载的是2.6.32。 2.下载YAFFS2  在移植之前确认你的嵌入式的开发板环境已经全部准备好! 第二,正式移植 首先,解压你的内核,tar jxvf linux-2.6.32  其次,进入你解压的yaffs2 文件 ,执行给内核打上yaffs2的补丁: 用法如下: usage: ./p

data-man的专栏 345

linux 内核移植 2.6.35.4 到s3c2440

硬件平台:FL2440 主机平台:Ubuntu 11.04 交叉编译器:arm-linux-gcc 4.3.2 本来是想移植最新的内核2.6.39但是总是在编译快完成的时候报错,有人说是新的内核对arm平台的支持不好,所以就降低了一下版本,这里移植2.6.35.4内核 一、准备工作 1、下载 解压内核 从官网上下载linux-2.6.35的内核, ftp:/

鱼思故渊的专栏 1588

linux-3.4.2移植到FL2440上(二)--修改MTD分区

修改MTD分区: 在/arch/arm/mach-s3c24xx/common-smdk.c 修改: 1 /* NAND parititon from 2.4.18-swl5 */ 2 3 static struct mtd_partition smdk_default_nand_part[] = { 4 [0] = { 5 .name ...

weixin_30418341的博客 104

uboot2009,增加引导内核功能

(文件参考) http://www.linuxidc.com/Linux/2011-05/35982.htm 移植环境 主机环境:VMare下 RHLE6,1G内存。 编译编译环境:arm-linux-gcc v4.4.3,arm-none-eabi-gcc v4.5.1。 开发板:fl2440,2M nor flash,128M nand flash。 u-boot版本:u-bo...

weixin_34380781的博客 194

用busybox构建根文件系统及出错总结

总结下这几天来用busybox构建根文件系统出现的一些问题,总的来说比较重要的就是配置busybox的过程,必须要知道哪些是需要的,是必须加载的,否则当内核启动后加载文件系统会出现非人类所能理解的问题。所以只要我们知道哪些基本的配置项是必须的,保证我们的文件系统能正常加载后,其它的一些命令可以根据 自己的实际情况自己添加就行了。废话少说,下面开始进行配置busybox吧,本人使用的是最新的busy

jikaishihuaidan的专栏 596

linux(ubuntu)编译busybox遇到的问题处理办法

今天研究了一下busybox的编译。自己下了一个busybox-1.25.0的版本(直接从busybox官网上下载:https://busybox.net/downloads/),进行编译,遇到了一些问题,通过百度搜索和自己摸索,也成功解决了,详细记录如下:首先交代一下系统版本和开发环境:操作系统:ubuntu 12.04(64bit)交叉编译工具链:arm-linux-gcc 4.4.3busy...

u013216061的博客 1万+

FL2440开发板简介及其烧录

目录 FL2440开发板简介 FL2440开发板 FL2440硬件资源列表 开发板存储系统: FL2440开发板烧录 FL2440烧录流程: 烧录准备工作 烧录文件: 硬件准备: 烧录过程 J-link操作: u-boot下烧录: 开发板启动流程: FL2440开发板简介 FL2440开发板 FL2440硬件资源列表 部件 型号 说明 CPU ...

Tian Jincheng's Blog 1367

linux qtopia-2.2.0编译,qtopia-2.2.0在linux上的安装(基于mini2440)

环境:fedora9、ubuntu10.04x86-qtopia、arm-qtopiagcc-4.3.x、g++-4.3.xarm-linux-4.3.2一、x86-qtopia的安装x86-qtopia的安装不管在哪一版本中的linux中,必须采用gcc-4.3.x、g++-4.3.x的编译器(或以下,没测试过),编译过程才不会莫名其妙出现很多错误。采用gcc-4.4或g++-4.4将出现错误,...

weixin_34352414的博客 363
上一篇: FL2440 Linux kernel + yaffs2根文件移植过程(一)
下一篇: WM_COPYDATA 消息实现进程间通信
shareCode
博客等级 码龄15年 125粉丝 40原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值