從0開始執行主線Linux核心

2021-07-29 21:10:53 字數 3383 閱讀 6177

本部落格以xunlong orangepi zero為例,執行最新linux 4.11.0-rc4核心。

# 轉殖u-boot倉庫

git clone git:

# 編譯配置

make orangepi_zero_defconfig

# 交叉編譯

make v=s -j8 arch=arm cross_compile=arm-linux-gnueabihf-

編譯完成在原始碼根目錄出現目標檔案:

# 轉殖kernel倉庫

git clone git:

/scm/linux

/kernel/git

/torvalds/linux.git

# 編譯配置

make arch=arm sunxi_defconfig

# 交叉編譯

make v=s -j8 arch=arm cross_compile=arm-linux-gnueabihf-

編譯完成在原始碼目錄出現目標檔案:

1\ busybox

# 轉殖busybox倉庫

git clone git:

# 編譯配置

make menuconfig

[*] build busybox as a static binary

(arm-linux-gnueabihf-) cross compiler prefix

(./_install) busybox installation prefix

# 編譯

make

cd _install/

chmod 4755 bin/busybox

接下來的步驟都基於這個_install資料夾。

2\ etc/inittab

建立etc/inittab檔案:

# /etc/inittab

::sysinit:/etc/init.d/rcs

ttys0::sysinit:/bin/ash

::ctrlaltdel:/sbin/reboot

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

3\ etc/fstab

建立etc/fstab檔案:

# device        mount-point     type    options dump    fsck    order

proc /proc

proc defaults 0

0tmpfs /tmp tmpfs defaults 0

0

4\ etc/init.d/rcs

建立etc/init.d/rcs檔案:

#!/bin/sh

mount -a

5\ 建立裝置節點

在dev目錄下建立基本的裝置節點:

mknod -m

0666 console c 5

1mknod -m

0666

null c 1

3mknod ttys0 c 4

64

將sd卡分割槽,第乙個分割槽放zimage和dtb檔案,第二個分割槽作為rootfs掛載:

#!/bin/sh

card=/dev/mmcblk0

cardroot=$$2

# sd卡格式化

dd if=/dev/zero of=$ bs=1m count=1

# sd卡分割槽

blockdev --rereadpt $

cat <$

1m,16m,c

,,leot

# 格式化分割槽

mkfs.vfat $$1

mkfs.ext4 $$2

# 刷入u-boot

dd if=u-boot-sunxi-with-spl.bin of=$ bs=1024 seek=8

# 寫入zimage和dtb檔案

mount $

$1 /mnt/

cp zimage /mnt/

cp sun8i-h2-plus-orangepi-zero.dtb /mnt/

umount /mnt/

# 寫入rootfs

mount $ /mnt/

cp -r /myrootfs /mnt/

umount /mnt

在u-boot命令列中執行:

=> setenv bootargs 'console=ttys0,115200n8 earlyprintk root=/dev/mmcblk0p1 rootwait panic=10'

=> fatload mmc 0

0x46000000 zimage

reading zimage

3657840

bytes read in

226 ms (15.4 mib/s)

=> fatload mmc 0

0x49000000 sun8i-h2

-plus

-orangepi

-zero

.dtb

reading sun8i-h2

-plus

-orangepi

-zero

.dtb

14025

bytes read in

30 ms (456.1 kib/s)

=> bootz 0x46000000

-0x49000000

成功進入linux系統,重新掛載可讀寫檔案系統,掛載proc,sys,debug目錄:

[ 58.970790] ext4-fs (mmcblk0p2): re-mounted. opts: data=ordered

/ # mount -t proc proc /proc

/ # mount -t sysfs sysfs /sys

/ # mount -t debugfs debugfs /sys/kernel/debug

/ # cat /proc/version

linux version

4.11

.0-rc4-00064-g89970a0 (chenziping@techping-pc) (gcc version

6.2.1

20161016 (linaro gcc 6.2-2016.11) ) #1 smp thu mar 30 18:55:45 cst 2017

/ #

從0開始 二

slam是指當某種移動裝置 如機械人 無人機 手機等 從乙個未知環境裡的未知地點出發,在運動過程中通過感測器 如雷射雷達 攝像頭等 觀測定位自身位置 姿態 運動軌跡,再根據自身位置進行增量式的地圖構建,從而達到同時定位和地圖構建的目的。sfm structure from motion 是一種和sl...

VC usb程式設計從0開始

課題 通過usb來顯示外部電子羅盤的資料.環境 vs.net 2003,usb使用方法 第3方庫 ntddk 日期 2010 02 25 進度 完成指南針顯示ui 未完成 1,微控制器部分工作 2.usb通訊部分.目前遇到的問題 第三方庫新增進來之後,還未移植,編譯的出現問題.日期 2010 02 ...

機器學習 從0開始

by 香蕉麥樂迪 機器學習簡介 機器學習是許多演算法的統稱,其中包含最近幾年火熱的深度學習,還包括許多適用於各種不同場景的其他機器學習演算法 邏輯斯特回歸,svm,knn,adaboost,em,kmeans等等 這些演算法從誕生到現在都有了幾十年的歷史 深度學習指的是深度神經網路,其中用於處理影象...