1. 程式人生 > >Linux及FL2440使用過程遇到的各種問題和小技巧

Linux及FL2440使用過程遇到的各種問題和小技巧

變化 AR tro 退出 details 服務 level bootstrap 標準輸出

原文鏈接: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打印出來;

  2. 使用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 在標準輸出上輸出版本信息並退出
  1. 使用補丁

    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

  1. 環境變量

    對環境變量的解釋:(參考鏈接:https://blog.csdn.net/a827415225/article/details/76757934)
  2. /etc/environment–>是系統在登錄時讀取的第一個文件,用於為所有進程設置環境變量。系統使用此文件時並不是執行此文件中的命令,而是根據KEY=VALUE模式的代碼,對KEY賦值以VALUE,因此文件中如果要定義PATH環境變量,只需加入一行形如 PATH=$PATH:/xxx/bin的代碼即可。(此文件中只針對PATH進行配置,確實如上文所說,它並不是執行此文件中的命令。上文中用的也是讀取這個詞,我對於單純的賦值但是不執行不太理解,不過一般也不會去操作這個文件)。

  3. /etc/profile–>是系統登錄時執行的第二個文件,可以用於設定針對全系統所有用戶的環境變量。(註意它的具有全局性,但是由於它執行性,他會容易被後面的配置文件給覆蓋掉一些操作,最典型的就是我們在這個給PATH添加arm-linux-gcc的路徑,會被後來的~/.profile覆蓋掉)。

  4. ~/.profile–>是對應當前登錄用戶的profile文件,用於定制當前用戶的個人工作環境。(個人用戶及root用戶)(但是有個前提是只有當~/.bash_profile和~/.bash_login不存在的時候才會讀取~/.profile,不過一般那兩個文件都不存在)。

  5. ~/.bashrc–>是對應當前登錄用戶的bash初始化文件,當用戶每次打開shell時,系統都會執行此文件一次。

  • ##### PS1: 設置shell提示符
    export PS1=‘[\u@\A \w]\$ ‘
    可以參考:https://blog.csdn.net/dongdong230/article/details/50455361

  • ##### PATH:決定了shell將到哪些目錄中尋找命令或程序
    export PATH=$PATH:./

  1. 修改時區和與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

Linux及FL2440使用過程遇到的各種問題和小技巧