Linux及FL2440使用过程遇到的各种问题和小技巧

原文链接:http://www.cnblogs.com/NickQ/p/8900474.html

Linux及FL2440使用过程遇到的各种问题和小技巧


  • 关于移植linux根文件系统中的问题

  1. 在最小内核移植并使用文件系统时,记得配置保存好u-boot相关参数,否者会导致Linux内核找不到文件系统死掉。
    文件系统时 JFFS2 时,设置的bootcmd和bootargs参数:
    set bootcmd 'nand read 30008000 100000 400000; bootm 30008000'
    set bootargs 'console=tty0 console=ttyS0,115200 root=/dev/mtdblock2 rootfstype=jffs2 init=/linuxrc mem=64M rw noinitrd loglevel=7'
    
    save
参数解释:
> bootargs的参数解析如下:
console=tty0 指定内核控制终端为LCD,内核启动信息输出到LCD上;console=ttyS0,115200 指定内核控制终端也为第一个串口,使用波特率115200,这样内核启动信息也打印到第一个串口上;
root=/dev/mtdblock2 指定根文件系统存放在mtdblock2上,该值应该与u-boot烧录位置、Linux内核分区保持一致;如果错误则Linux内核会因找不到根文件系统而启动失败;
rootfstype=jffs2 指定根文件系统类型为jffs2,如果该参数错误则内核启动失败;
init=/linuxrc 指定init进程执行/linuxrc这个程序,他会解析并执行/etc/inittab下的命令;
mem=64M u-boot告诉Linux内核有64M的内存;
rw 根文件系统以读写的形式挂载;
noinitrd 没有使用initrd;
loglevel=7 定义内核printk的打印级别为7,即所有信息都通过console打印出来;

文件系统时 UBIFS 时,设置的bootcmd和bootargs参数:
    set bootcmd 'nand read 30008000 100000 400000; bootm 30008000'
    set bootargs 'console=tty0 console=ttyS0,115200 ubi.mtd=2 root=ubi0:rootfs rootfstype=ubifs mem=64M noinitrd rw loglevel=7'
    
参数解释:
> bootargs的参数解析如下:
console=tty0 指定内核控制终端为LCD,内核启动信息输出到LCD上;console=ttyS0,115200 指定内核控制终端也为第一个串口,使用波特率115200,这样内核启动信息也打印到第一个串口上;
ubi.mtd=2 指定UBI卷建立在mtd2上,该值应该与u-boot烧录位置、Linux内核分区保
持一致;如果错误则Linux内核会因找不到根文件系统而启动失败;
root=ubi0:rootfs 指定根文件系统所在位置:在制作UBIFS的过程中,我们通过ubinize命令对文件系统镜像进行处理时,其配置文件中的vol_id指定为0,vol_name指定为rootfs;
rootfstype=jffs2 指定根文件系统类型为jffs2,如果该参数错误则内核启动失败;
init=/linuxrc 指定init进程执行/linuxrc这个程序,他会解析并执行/etc/inittab下的命令;
mem=64M u-boot告诉Linux内核有64M的内存;
rw 根文件系统以读写的形式挂载;
noinitrd 没有使用initrd;
loglevel=7 定义内核printk的打印级别为7,即所有信息都通过console打印出来;
  1. 使用make menuconfig时,一定要将环境配置为vt100的模式。(可只配置虚拟机,CRT可以不配置)。
    否者将导致部分输入框无法退格。

    切换到vt100:[nick@XQLY linux-3.0]$ export TERM=vt100
    切换到linux:[nick@XQLY linux-3.0]$ export TERM=linux


  • 补丁的制作和使用

  1. 生成补丁

    diff 命令
    简单的说,diff的功能就是用来比较两个文件的不同,然后记录下来,也就是所谓的diff补丁。语法格式:diff 【选项】 源文件(夹) 目的文件(夹),就是要给源文件(夹)打个补丁,使之变成目的文件(夹),术语也就是“升级”。
    diff -Nrua [fromdir] [todir] > file 制作补丁命令
    参数解释:
    -r 是一个递归选项,设置了这个选项,diff会将两个不同版本源代码目录中的所有对应文件全部都进行一次比较,包括子目录文件。
    -N 选项确保补丁文件将正确地处理已经创建或删除文件的情况。
    -u 选项以统一格式创建补丁文件,这种格式比缺省格式更紧凑些。
    -a 将所有文件当做文本文件来处理
    -b 忽略空格造成的不同
    -B 忽略空行造成的不同
    -q 只报告什么地方不同,不报告具体的不同信息
    -H 利用试探法加速对大文件的搜索
    -i 忽略大小写的变化
    -l 用pr 对输出进行分页
    -s 两个文件相同时才报告
    -v 在标准输出上输出版本信息并退出

  2. 使用补丁

    patch 命令

    简单的说,patch就是利用diff制作的补丁来实现源文件(夹)和目的文件(夹)的转换。这样说就意味着你可以有源文件(夹)――>目的文件(夹),也可以目的文件(夹)――>源文件(夹)。

    patch -p0 [fromdir] < file.patch 打补丁命令

    参数解释:
    -p0 选项要从当前目录查找目的文件(夹)
    -p1 选项要忽略掉第一层目录,从当前目录开始查找。
    (-pN选项表示取消N层目录数)

    如果使用参数-p0,那就表示从当前目录找一个叫做old的文件夹,在它下面寻找modules下的pcitable文件来执行patch操作。
    如果使用参数-p1,那就表示忽略第一层目录(即不管old),从当前目录寻找modules的文件夹,在它下面找pcitable。这样的前提是当前目录必须为modules所在的目录。而diff补丁文件则可以在任意位置,只要指明了diff补丁文件的路径就可以了。当然,可以用相对路径,也可以用绝对路径。不过我一般习惯用相对路径。

    -E 选项说明如果发现了空文件,那么就删除它.
    -R 选项说明在补丁文件中的“新”文件和“旧”文件现在要调换过来了(实际上就是给新版本打补丁,让它变成老版本)


  • Linux 常用方法

  1. 虚拟机中互传文件

    安装一个软件,叫lrzsz(SZ/RZ)。
    sudo yum install lrzsz
    使用sz/rz 与Secure CRT 互传文件

  2. linux sshd 开机自启动

    chkconfig命令
    将sshd加入到系统服务中
    chkconfig sshd on
    可以查看sshd的运行级别状态:

    [root@localhost ~]# chkconfig --list sshd    
    sshd   0:关闭  1:关闭  2:启用  3:启用  4:启用  5:启用  6:关闭 
    

    //chkconfig查看启动项使用命令:
    chkconfig --list
    //chkconfig关闭启动项命令:
    chkconfig autostart.shoff
    //chkconfig删除启动项命令:
    chkconfig --del autostart.sh

  3. 环境变量

    对环境变量的解释:(参考链接:https://blog.csdn.net/a827415225/article/details/76757934)

    1. /etc/environment–>是系统在登录时读取的第一个文件,用于为所有进程设置环境变量。系统使用此文件时并不是执行此文件中的命令,而是根据KEY=VALUE模式的代码,对KEY赋值以VALUE,因此文件中如果要定义PATH环境变量,只需加入一行形如 PATH=$PATH:/xxx/bin的代码即可。(此文件中只针对PATH进行配置,确实如上文所说,它并不是执行此文件中的命令。上文中用的也是读取这个词,我对于单纯的赋值但是不执行不太理解,不过一般也不会去操作这个文件)。

    2. /etc/profile–>是系统登录时执行的第二个文件,可以用于设定针对全系统所有用户的环境变量。(注意它的具有全局性,但是由于它执行性,他会容易被后面的配置文件给覆盖掉一些操作,最典型的就是我们在这个给PATH添加arm-linux-gcc的路径,会被后来的~/.profile覆盖掉)。

    3. /.profile–>是对应当前登录用户的profile文件,用于定制当前用户的个人工作环境。(个人用户及root用户)(但是有个前提是只有当/.bash_profile和/.bash_login不存在的时候才会读取/.profile,不过一般那两个文件都不存在)。

    4. ~/.bashrc–>是对应当前登录用户的bash初始化文件,当用户每次打开shell时,系统都会执行此文件一次。

    • PS1: 设置shell提示符

    export PS1='[\u@\A \w]\$ '
    可以参考:https://blog.csdn.net/dongdong230/article/details/50455361

    • PATH:决定了shell将到哪些目录中寻找命令或程序

    export PATH=$PATH:./

  4. 修改时区和与Internet时间同步

    vi /etc/sysconfig/clock

    ZONE="Asia/Shanghai"  
    UTC=false  
    ARC=false  
    

    日期设定:date -s 2018/04/13
    时间设定:date -s 16:04:00

    查看硬件时间(BIOS的): hwclock 命令
    参数解释:
    -r:查看现有BIOS时间,默认为-r参数.
    -w:将现在的linux系统时间写入BIOS中.
    

    同步BIOS时钟,强制把系统时间写入CMOS: clock -w
    与Internet时间同步

    vi /etc/rc.d/rc.local   
    /usr/sbin/ntpdate -u 192.168.0.2 192.168.0.3 192.168.0.4;
    /sbin/hwclock -w 
    

  • FL2440烧录

  1. 烧录过程命令

    //用 J_link 烧录bootstrap
    h
    speed 12000
    loadbin D:\Linux_share\bootstrap-s3c2440.bin 0
    setpc 0
    g
    //用 J_link 烧录u-boot
    h
    loadbin D:\Linux_share\u-boot-s3c2440.bin 0x33f80000
    setpc 0x33f80000
    g
    
    //擦除整块Flash并设置IP
    nand scrub
    y
    set ipaddr 192.168.110.2;set serverip 192.168.110.1;save
    
    //下载烧录U-boot
    tftp 30008000 u-boot-s3c2440.bin;nand erase 0 100000;nand write 30008000 0 60000
    
    //下载烧录linuxrom
    tftp 30008000 linuxrom-s3c2440.bin;nand erase 100000 1000000;nand write 30008000 100000 F00000
    
    //下载烧录rootfs-ubifs
    tftp 30800000 rootfs-ubifs.bin;nand erase 1000000 4000000;nand write 30800000 1000000 3000000
posted @ 2018-04-21 11:57  NickQ  阅读(566)  评论(0编辑  收藏  举报