转自:http://mp.weixin.qq.com/s?__biz=MzAxNTAyOTczMw==&mid=2649328515&idx=1&sn=5849fba4b44ec28a15217edaf629bc34&chksm=83976f09b4e0e61ff356124dd8a4befd126d213f15a769afc067db2aa3391e452fd8a5b65b1f&mpshare=1&scene=23&srcid=0612S5eJpICGarjpiL39WbUo#rd

该教程参考了<<嵌入式Linux应用开发完全手册>>构建文件系统章节和<<jz2440v2_v3开发板(4.3寸LCD)使用手册>>编译内核章节,篇幅较长,建议转发收藏观看。

开发板:JZ2440

主机linux:Ubuntu 9.10(资料光盘配的那个)

内核:Linux 2.6.22.6

交叉编译器:arm-linux-gcc 3.4.5(也可以用毕业班4.3.2编译器,不过笔者没找对lib,失败了,先不深究)

busybox:busybox-1.21.0.tar.bz2

(本想用韦老师视频用的busybox -1.17.0,后来发现其不支持ftp和tftp,遂放弃)

1,下载busybox 1.21.0: https://busybox.net/downloads/

2,借助filezilla把文件上传到ubuntu

3,解压busybox

$tar
jxf busybox-1.21.0.tar.bz2

$cd
busybox-1.21.0/

先添加比较好用的tab工具(默认已经添加):

$ make menuconfig

BusyboxSettings  --->

Busybox Library Tuning  --->

[*]  Tab completion

4,  编译和安装busybox

编译前先修改busybox根目录的Makefile,使用交叉编译器:

ARCH           ?= $(SUBARCH)

CROSS_COMPILE   ?=

改为:

ARCH            ?= arm

CROSS_COMPILE   ?= arm-linux-

$ make

出现错误:

解决方法:

配置busybox去掉 ionice 选项

$  makemeunconfig

选择下面的菜单:

Miscellaneous Utilities  --->    

[ *]ionice                                    

按空格去掉这个选项。改成下面这样。

[ ]ionice         

保存退出

继续make出现错误:

方法同上,将nandwrite,nanddump选项去掉。

继续make又出现错误:

方法同上,将ubi开头的选项都去掉

继续make,又出现错误:

方法同上:

Networking Utilities  --->

[*] udhcp server (udhcpd)

改为:

[] udhcp server (udhcpd)

终于make成功

最后执行“make CONFIG_PREFIX=DIR install”将busybox安装到DIR指定的目录下。

$ make CONFIG_PREFIX = /work/busybox-1.21.0/rootfs install

一切完成后将在/work/busybox-1.21.0/rootfs 生成如下文件、目录:

drwxr-xr-x 2 book book 40962017-05-28 04:59 bin

lrwxrwxrwx 1 book book 11 2017-05-28 04:59 linuxrc ->bin/busybox

drwxr-xr-x 2 book book 40962017-05-28 04:59 sbin

drwxr-xr-x 4 book book 40962017-05-28 04:59 usr

5.安装glibc库

在开发板上只需要加载器和动态库,假设要构建的根文件系统目录为/work/busybox-1.21.0/rootfs,如下操作即可:

$ cd /work/busybox-1.21.0/rootfs

$ mkdir  lib

$ cd /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/lib

$ cp*.so* –d /work/busybox-1.21.0/rootfs/lib

6.构建etc目录

① 创建etc/inittab文件

$ cd /work/busybox-1.21.0/rootfs

$ mkdir etc

$ cd etc

$ touch inittab

$ sudo chmod 777 inittab

$ vi inittab,内容为:

#/etc/inittab

::sysinit:/etc/init.d/rcS

ttySAC0::askfirst:-/bin/sh

::ctrlaltdel:/sbin/reboot

::shutdown:/bin/umount -a –r

②创建etc/init.d/rcS文件:

$mkdir init.d

$cd init.d

$touch rcS

$sudo chmod 777 rcS

$ vi rcS, 内容为:

mount   -a

mkdir  /dev/pts

mount-t devpts devpts /dev/pts

echo/sbin/mdev > /proc/sys/kernel/hotplug

ifconfig  eth0 192.168.1.100

mdev -s

③ 创建etc/fstab文件

$cd ..

$touch fstab

$sudo chmod 777 fstab

$vi 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

④   构建dev目录

$ mkdir –p /work/busybox-1.21.0/rootfs/dev

$ cd /work/busybox-1.21.0/rootfs/dev

$ sudo mknod console c 5 1

$ sudo mknod null c 1 3

$ sudo mknod ttySAC0 c 204 64

$ sudo mknod mtdblock0 b 31 0

$ sudo mknod mtdblock1 b 31 1

$ sudo mknod mtdblock2 b 31 2

⑤   构建其他目录

其他目录可以是空目录,比如proc、mnt、tmp、sys、root等,如下创建:

$ cd /work/busybox-1.21.0/rootfs

$mkdir proc mnt tmp sys root

⑥   启动板子必须要有内核,我们先编译uImage

上传linux 2.6.22.6到ubuntu,解压打补丁编译:

$ tar xjf linux-2.6.22.6.tar.bz2

$ cd linux-2.6.22.6

$ patch -p1 < ../linux-2.6.22.6_jz2440.patch

$ mv ../4.3寸LCD_mach-smdk2440.carch/arm/mach-s3c2440/mach-smdk2440.c // 替换4.3寸LCD驱动

$ cp config_ok .config

$ make uImage

⑦   进入uboot,tftp下载uImage到jz2440,并烧写

先设置网络

set gatewayip 192.168.1.1   //设置网关

set netmask 255.255.255.0 //设置子网掩码

set ipaddr 192.168.1.111    //设置uboot阶段的开发板ip

set serverip 192.168.1.170 //设置服务器ip

ping 192.168.1.17

通了

tftp 30000000 uImage //必须先PING通windows

nand erase kernel

nand write.jffs2 30000000 kernel

设置boot命令用到的bootcmd

set bootcmd nand read.jffs2 0x30007FC0 kernel; bootm 0x30007FC0

save

⑧   NFS启动jz2440 //把文件系统先放到NFS目录上测试

a.先设置nfs目录:

sudo vi /etc/exports

追加一行:/work/busybox-1.21.0/rootfs   *(rw,sync,no_root_squash)

b. 设置bootargs

set bootargs noinitrd root=/dev/nfs nfsroot=192.168.1.199:/work/busybox-1.21.0/rootfs ip=192.168.1.100:192.168.1.199:192.168.1.255:255.255.255.0::eth0 init=/linuxrc
console=ttySAC0,115200

save

说明:

192.168.1.100是linux系统起来后的开发板ip

192.168.1.199是作为NFS服务器的ubuntu ip

192.168.1.255是ubuntu 网关

/work/busybox-1.21.0/rootfs是ubuntu /etc/exports设置的nfs目录

255.255.255.0是ubuntu子网掩码

boot卡在

解决方法:

先在ubuntu上测试NFS

sudo mount -t nfs -o nolock 192.168.1.199: /work/busybox-1.21.0/rootfs/mnt

出现错误:

解决方法:

把所有读写这个NFS文件的进程都kill掉

sudo fuser -k /mnt

挂载成功:

重启开发板启动成功:

7. 在etc目录下增加passwd、group

$ cd /work/busybox-1.21.0/rootfs/etc

$ touch passwd

$ touch group

$ sudo chmod 777passwd

$ sudo chmod 777 group

$ vi passwd ,内容为:

root:x:0:0:root:/root:/bin/sh

$ vi group,内容为:

root:x:0:

若一个用户没有密码,它在linux系统中就是不存在的用户,无法用这个用户登录。现在已经使用NFS启动成功,顺便设置一下root用户密码(本操作在开发板上完成)

添加终端登录用户验证功能

笔者设的root密码是123456

8. 添加telnetd功能

busybox默认已经支持telnetd和telnet,开发板只要启动telnet服务

#telnetd

securecrt快速连接选择Telnet协议、主机名、端口:

输入用户名root,密码123456即可登录开发板:

酷毙了有木有?!

9. 添加ftp功能

制作文件系统时新建/etc/inetd.conf

cd /work/busybox-1.21.0/rootfs/etc

$touch inetd.conf

$chmod 777 inetd.conf

$vi
inetd.conf,内容如下

21 stream tcpnowait root ftpd ftpd -w /

开发板开启ftpd

$inetd

便可以用filezilla输入主机用户名密码端口(默认21),开发板window之间互传文件了

10. 添加tftp功能

跟ftp类似,也是把配置信息写入脚本。

$vi inetd.conf,追加一行:

69 dgram udpnowait  root  /usr/sbin/tftpd  tftpd -l

测试tftp

window打开tftpd32(资料光盘有此软件),选择Tftp Client,如图输入Host ,Port和Local File(笔者的是tftp软件所在目录)

开发板执行tftp -g -r 1.docx 192.168.1.170 把window Local File下的1.docx文件

传到开发板:

当然也可以把开发板上的文件上传到windows,如图把开发板etc目录下的fstab文件上传到
window Local File目录

至此,该文件系统已经支持telnet ftp tftp,再用NFS启动一下,确保没问题后再烧到开发板

//当然也可以一直用NFS,文件系统不烧进开发板。

烧到开发板步骤如下:

1.把毕业班的yaffs2源码上传到ubuntu解压后,进入utils目录

$ cd Development_util_ok/

$ cd yaffs2/

$ cd utils/

$ make

$ sudo cp mkyaffsimage /usr/local/bin

$ cd /work/busybox-1.21.0/

$ mkyaffs2image rootfs 20170607.yaffs2

2. 把20170607.yaffs2 拷贝到window tftp软件所在目录,设置bootargs:

setenv bootargs 'root=/dev/mtdblock3 noinitrd init=/linuxrc console=ttySAC0,115200 '

save

3.下载文件系统 //前提是开发板能PING window

$ tftp 30000000 20170607.yaffs2

$ nand erase root

$ nand write.yaffs 30000000 0x00260000 $(filesize)

4. 启动Linux

$ boot

只要开发板启动并做了相关设置后,便可以使用telnet ftp tftp了。

完毕。


[置顶] 从零制作文件系统到JZ2440,使其支持telnet , ftp 和tftp的更多相关文章

  1. jquery——制作置顶菜单

    置顶菜单: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  2. js改变数组的两个元素的位子,互换、置顶

    //js数组的元素上移和下移动 var fieldData=[ {name:'id',value:'ID'} , {name:'username',value:'用户名'} , {name:'emai ...

  3. 窗口置顶 - 仿TopWind

    前置学习:低级鼠标hook,获得鼠标状态. 这个在原来获得鼠标状态的基础上,加上一个事件处理即可. TopWind就是一个可以置顶窗口的文件,避免复制粘贴的时候的来回切换(大窗口与小窗口),算是一个实 ...

  4. [置顶] Android开发笔记(成长轨迹)

    分类: 开发学习笔记2013-06-21 09:44 26043人阅读 评论(5) 收藏 Android开发笔记 1.控制台输出:called unimplemented OpenGL ES API ...

  5. 仿照 QQ 的 cell 的左滑删除、置顶、标记未读效果

    侧滑删除.置顶.取消关注,在iOS8之前需要我们自定义,iOS8时苹果公司推出了新的API,UITableViewRowAction类,我们可以使用该类方便的制作出如下图的效果. 下面是实现的主要代码 ...

  6. 在UWP中页面滑动导航栏置顶

    最近在研究掌上英雄联盟,主要是用来给自己看新闻,顺便copy个界面改一下段位装装逼,可是在我copy的时候发现这个东西 当你滑动到一定距离的时候导航栏会置顶不动,这个特性在微博和淘宝都有,我看了@ms ...

  7. WinFrom窗体始终置顶

    调用WindowsAPI使窗体始终保持置顶效果,不被其他窗体遮盖: [DllImport("user32.dll", CharSet = CharSet.Auto)] privat ...

  8. winform窗体置顶

    winform窗体置顶 金刚 winform 置顶 今天做了一个winform小工具.需要设置置顶功能. 网上找了下,发现百度真的很垃圾... 还是必应靠谱些. 找到一个可以链接. https://s ...

  9. 自定义置顶TOP按钮

    简述一下,分为三个步骤: 1. 添加Html代码 2. 调整Css样式 3. 添加Jquery代码 具体代码如下: <style type="text/css"> #G ...

随机推荐

  1. Maven配置一键部署远程Tomcat

    1. 首先需要配置远程Tomcat的访问权限(设置访问用户名密码) http://www.cnblogs.com/liuchao102/p/5519345.html 2. 配置pom.xml 添加to ...

  2. JAVA获取Spring上下文

    1. 添加监听 public class SpringContextListener implements ServletContextListener { //获取spring注入的bean对象 p ...

  3. 关于Json如何转换成对象及获值问题!

    var result = eval('('+result+')'); result为Json 转换成var result对象,可以 if(result.success){ window.locatio ...

  4. vc 判断当前用户是否在管理员组以及是否SYSTEM权限运行

    BOOL IsUserInAdminGroup() //判断是否在管理员组 { BOOL fInAdminGroup = FALSE; HANDLE hToken = NULL; HANDLE hTo ...

  5. Java中各种集合特点总结

    1:集合:    (1) Collection(单列集合)         List(有序,可重复)             ArrayList                 底层数据结构是数组,查 ...

  6. openstack-ansible Chapter 4. Deployment configuration

    Initial environment configuration Copy the contents of the /opt/openstack-ansible/etc/openstack_depl ...

  7. linux学习-磁盘管理

  8. R中的基本函数运算

    一.均值 1.均值:mean(X)#计算所有元素的均值,包括矩阵.向量 2.行均值:apply(x,1,mean) 3.行均值:apply(x,2,mean) 注:如果x是数据框,则返回的就是向量 e ...

  9. 路由器分配的IP地址

    在IP地址范围内,一部分地址将保留作为私人IP地址空间,专门用于内部局域网使用,这些地址如下表: A类 10.0.0.0-10.255.255.255 网络数:1 B类 172.16.0.0-172. ...

  10. Struts2架构流程

    [Struts2] Action实现. interceptor实现. Filter工作原理. 使用 拦截器来处理请求. 业务逻辑控制器与 Servlet API分离. ================ ...