Nanopi M3另闢蹊徑開機記錄

本篇文章的文件系統是瘦身版的,不健全的。但這恰恰是學習內核的好方法,系統運行時會提示缺少什麼,或者異常。當你解決這些問題的時候,就會了解到文件系統爲什麼有這些文件,這些目錄。

網上有很多關於nanopi m3的燒寫開機啓動教程。大多數都是根據友善之臂公司給出的官方教程,這裏我也把官方教程鏈接貼出來:http://www.arm9.net/nanopi-m3.asp。

今天我要記錄的nanopi m3開機啓動教程,是開機啓動linux小系統,進入shell命令行,沒有多餘的東西。整個系統就只有三個東西:U-boot,kernel,rootfs。所以我不需要4G以上的內存卡,有個10幾M就足夠了。所以我隨便找了個以前不用的256M內存卡,準備開始玩一下。

·分析官方鏡像文件

先了解下“敵情”

首先從官網下載了燒寫鏡像文件,我這裏選擇s5p6818-debian-wifiap-sd4g-20161117.img。名字太長了,我直接重名爲debian.img。

用file命令查看下鏡像文件,

jqh@ubuntu:~/work$ file debian.img

debian.img: DOS/MBR boot sector; partition 1 : ID=0x83, start-CHS (0x0,1,1), end-CHS (0x3ff,254,63), startsector 2048, 131072 sectors; partition 2 : ID=0x83, start-CHS (0x0,1,1), end-CHS (0x3ff,254,63), startsector 133120, 7484066 sectors

可以看出,鏡像分成兩個分區partition1~2。第一個分區從2048段開始,總共有131072個段。第二個分區從133120段開始。

那0到2047段怎麼沒有提及。其實第0段是有作用的,可以上網瞭解下,其中一個作用就是描述塊設備的分區情況。第1~2047段,就是引導程序了,包括u-boot。

用fdisk命令查下鏡像文件,

jqh@ubuntu:~/work$ fdisk -lu debian.img

Disk debian.img: 3.6 GiB, 3899999232 bytes, 7617186 sectors

Units: sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disklabel type: dos

Disk identifier: 0x00000000

Device      Boot  Start     End Sectors  Size Id Type

debian.img1        2048  133119  131072   64M 83 Linux

debian.img2      133120 7617185 7484066  3.6G 83 Linux

這裏我們瞭解到每一個段sector的大小是512字節。所以分區描述段和引導段總大小是1M。第一個分區大小64M,第二個分區大小3.63G,所以知道官方爲什麼需要你準備不小於4G的內存卡了吧。我們這裏只需要前1M數據拿出來,然後自己做2個小分區,一個放內核文件,一個放文件系統就可以了。

格式化256M內存卡

將內存卡以前的分區信息全部幹掉。

jqh@ubuntu:~/work$ ls /dev/sdb*

/dev/sdb

重新建立分區,具體如下圖

然後將兩個分區格式化,第一個分區格式化爲FAT,第二個分區格式化爲ext4(也可以不要fat看個人喜好)。

下圖可以看到格式化,掛載後的信息,

提取debian.img的引導段程序

由上面分析可知,我們只需要debian.img的第1段到2047段就可以了,所以,使用dd命令:

jqh@ubuntu:~/work$ sudo dd if=debian.img of=/dev/sdb bs=512 count=2047 seek=1 skip=1

2047+0 records in

2047+0 records out

1048064 bytes (1.0 MB, 1.0 MiB) copied, 1.10491 s, 949 kB/s

其中seek表示跳過輸入文件多少個bs,skip表示跳過輸出文件多少個bs。

到這裏,引導代碼就提取出來了,趕緊來試試引導程序能不能跑起來。

接上串口115200,8n1,看到如下打印信息:

Welcome to minicom 2.7

OPTIONS: I18n

Compiled on Nov 15 2018, 20:18:47.

Port /dev/ttyUSB0, 06:08:35

Press CTRL-A Z for help on special keys

scratch is broken, clear

watchdog timer star

working to aarch32

waiting for pll change..

--------------------------------------------------------------------------------

 Second Boot by Nexell Co. : Ver0.3.6 - Built on Jun 29 2016 15:19:53

--------------------------------------------------------------------------------

DDR3 POR Init Start 0

Lock value  = 188

······

mmc0 is current device

Writing to MMC(0)... done

Writing to MMC(0)... done

HDMI: display.0, preset 0 (1280 *  720)

HDMI: PHY Ready!!!

Failed to mount ext2 filesystem...

** Unrecognized filesystem type **

can't find bmp at 0x47000000 (type:0xffff), fb:0x46000000...

LOGO: DRAW FB=0x46000000, X=1280, Y= 720, Bpp=32

Hit any key to stop autoboot:  0

s5p6818#

從打印看,好像不支持FAT,算了我還是把第一個分區格式化爲ext2再試試。

改之後如下圖所示,這裏報錯誤是因爲使用了默認的內核鏡像,我們需要更改默認鏡像名字,或者手動選擇啓動。後面會講到,

下一步把內核放到第一分區。

由於默認的U-boot,引導過程只有1秒的等待時間,如果沒有按鍵,就往下執行。我們可以將這個延時改大一些,免得手忙腳亂。

這樣下次開機,它就會等你10秒了。

·把nanopi m3的內核放到第一個分區

自己編譯一個內核,內核獲取地址:'https://github.com/friendlyarm/linux-3.4.y.git/

編譯方法

make nanopi3_linux_defconfig ARCH=??

make uImage ARCH=?? CROSS_COMPILE=??

·將busybox做好的文件系統放到第二個分區

這裏還需要做一個修改,修改啓動參數bootargs。因爲我們只需要一些簡單的參數就可以了。

我們嘗試啓動內核,在串口輸入如下命令,果然內核啓動成功。

s5p6818# ext4load mmc 0:1 0x48000000 uImage

s5p6818# bootm 0x48000000

## Booting kernel from Legacy Image at 48000000 ...

   Image Name:   Linux-3.4.39-s5p6818-gc496018

   Image Type:   ARM Linux Kernel Image (uncompressed)

   Data Size:    4431400 Bytes = 4.2 MiB

   Load Address: 40008000

   Entry Point:  40008000

   Verifying Checksum ... OK

   Loading Kernel Image ... OK

 

Starting kernel ...

省略一堆打印信息,進入shell命令行,如下:

查看系統版本

/ # uname -a

Linux NanoPi3 3.4.39-s5p6818-gc496018 #1 SMP PREEMPT Sun Jan 20 00:47:18 PST 2019 armv7l GNU/Linux

查看文件系統

/ # ls

bin         etc         lost+found  sbin        usr

dev         linuxrc     proc        sys

說明確實啓動成功。恭喜~~

官方自帶的鏡像u-boot是不支持網絡功能的,後面將會修改u-boot配置,替換當前的U-boot,使得u-boot支持網絡功能,開發樂趣更多,免於不停燒寫內存卡影響壽命。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章