如何利用源代码在Banana Pi上安装最小的Debian

发布网友

我来回答

1个回答

热心网友

1.配置lubuntu主机,使其通过网络连接Banana Pi。
a.在lubuntu主机上,分配一个固定的IP地址到以太网接口(例如,eth0)
#为eth0定义一个静态IP
sudo vi /etc/network/interfaces

auto lo eth0

iface lo inet loopback

iface eth0 inet static

address 192.168.8.1

netmask 255.255.255.0
复制代码
# 重新启动接口
sudo ifup eth0
复制代码
b.在lubuntu主机上,设置dhcp服务器eth0接口
# 安装dhcp服务器
sudo apt-get install isc-dhcp-server
复制代码
# 定义dhcp服务器的操作接口 (eth0)
sudo vi /etc/default/isc-dhcp-server

INTERFACES=”eth0″
复制代码
# 配置一个基本的dhcp服务
sudo vi /etc/dhcp/dhcpd.conf

subnet 192.168.8.0 netmask 255.255.255.0 {

range 192.168.8.16 192.168.8.127;

# hard-wired OpenDNS name server for basic setup

option domain-name-servers 208.67.222.222;

option routers 192.168.8.1;

}

# host banana always gets a fixed IP address

host banana {

fixed-address 192.168.8.8;

}
复制代码
# 重启dhcp服务
sudo service isc-dhcp-server restart
复制代码
c.在lubuntu主机上,设置一个以太网接口到因特网之间的桥接
# 使数据包在ufw中转发
# 在/etc/ufw/sysctl.conf中 取消下面两行命令的注释:
sudo vi /etc/ufw/sysctl.conf

net.ipv4.ip_forward=1
复制代码
# 在/etc/default/ufw中把DEFAULT_FORWARD_POLICY 改为 “ACCEPT” :
sudo vi /etc/default/ufw

DEFAULT_FORWARD_POLICY="ACCEPT"
复制代码
# 伪装: 在/etc/ufw/before.rules中,头注释之后,添加以下内容:
sudo vi /etc/ufw/before.rules

# NAT rules (IP Masquerading)

*nat

:POSTROUTING ACCEPT [0:0]

#Forward traffic from eth0 range 192.168.8.xxx to wlan0

-A POSTROUTING -s 192.168.8.0/24 -o wlan0 -j MASQUERADE

# 'COMMIT' the above nat table rules for processing

COMMIT

复制代码
# 重启ufw 服务:
sudo ufw disable && sudo ufw enable
复制代码
2.在lubuntu主机上创建u-boot, script.bin 和banana-pi linux-kernel
a. 在lubuntu主机上安装一个交叉编译器工具链
sudo apt-get install build-essential u-boot-tools uboot-mkimage binutils-arm-linux-gnueabihf gcc-4.6-arm-linux-gnueabihf-base g++-4.6-arm-linux-gnueabihf gcc-arm-linux-gnueabihf cpp-arm-linux-gnueabihf libusb-1.0-0 libusb-1.0-0-dev git wget fakeroot kernel-package zlib1g-dev libncurses5-dev
复制代码
b. 创建u-boot (u-boot-bananapi或者u-boot-sunxi-with-spl.bin)
git clone -b bananapi https://github.com/LeMaker/u-boot-bananapi.git

cd u-boot-bananapi

make CROSS_COMPILE=arm-linux-gnueabihf- Bananapi_config

make CROSS_COMPILE=arm-linux-gnueabihf-

cd ..
复制代码
c. 创建script.bin
git clone https://github.com/LeMaker/sunxi-tools.git

git clone https://github.com/LeMaker/sunxi-boards.git

cd sunxi-tools

make
复制代码
#最后修改板子的配置文件: (SKIPPED HERE)
vi sys_config/a20/Bananapi.fex

cd ..

sunxi-tools/fex2bin sunxi-boards/sys_config/a20/Bananapi.fex script.bin
复制代码
d. 在linux-bananapi/ 中创建linux kernel
git clone -b bananapi-3.4 https://github.com/LeMaker/linux-bananapi.git

cd linux-bananapi/

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j2 sun7i_defconfig
复制代码
# 最后微调内核配置 (SKIPPED HERE)
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
复制代码
# 创建 linux-bananapi/arch/arm/boot/uImage (the '-j2' option executes make tasks on two cpus for faster processing)
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j2 uImage moles
复制代码
# 在linuxbananapi/output/lib/moles/3.4.90+/中创建模块
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=output moles_install

cd ..
复制代码
3. 设置可启动的SD卡
假定SD卡在/dev/mmcblk0下,有一个空白的分区表而且未挂载. 至少4GB
a. 分区并格式化SD卡
#使用下面的命令对SD卡进行分区
sudo fdisk /dev/mmcblk0

Command (m for help): n

Partition type:

p primary (0 primary, 0 extended, 4 free)

e extended

Select (default p): (enter)

Using default response p

Partition number (1-4, default 1): (enter)

Using default value 1

First sector (2048-xxxxx, default 2048): (enter)

Using default value 2048

Last sector, +sectors or +size{K,M,G} (2048-xxxxx, default xxxxx): +20M

Command (m for help): n

Partition type:

p primary (1 primary, 0 extended, 3 free)

e extended

Select (default p): (enter)

Using default response p

Partition number (1-4, default 2): (enter)

Using default value 2

First sector (43008-xxxxx, default 43008): (enter)

Using default value 43008

Last sector, +sectors or +size{K,M,G} (43008-15523839, default 15523839): (enter)

Using default value xxxxx

Command (m for help): w

sudo sfdisk -R /dev/mmcblk0

sudo mkfs.ext2 /dev/mmcblk0p1

sudo mkfs.ext4 /dev/mmcblk0p2

复制代码
b. 将bootloader, boot 脚本和内核映像加到boot分区
sudo dd if=/dev/zero of=/dev/mmcblk0 bs=1k count=1023 seek=1

sudo sfdisk -R /dev/mmcblk0

sudo dd if=u-boot-bananapi/u-boot-sunxi-with-spl.bin of=/dev/mmcblk0 bs=1024 seek=8

sudo mount /dev/mmcblk0p1 /mnt
复制代码
# 创建bootloader脚本
sudo vi /mnt/boot.cmd

setenv bootargs console=ttyS0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 rootwait panic=10 disp.screen0_output_mode=EDID:1280x720p50 hdmi.audio=EDID:0

ext2load mmc 0 0x43000000 script.bin

ext2load mmc 0 0x48000000 uImage

bootm 0x48000000

sudo mkimage -C none -A arm -T script -d /mnt/boot.cmd /mnt/boot.scr
复制代码
# 拷贝内核映像和banana配置脚本到SD卡
sudo cp linux-bananapi/arch/arm/boot/uImage /mnt

sudo cp sunxi-boards/script.bin /mnt

sudo umount /mnt
复制代码
c.用debootstrap安装一个debian wheezy 文件系统
#在lubuntu主机上设置debootstrap
sudo mount /dev/mmcblk0p2 /mnt

sudo apt-get install qemu-user-static debootstrap binfmt-support

rootdir=/mnt

dist=wheezy

sudo debootstrap --arch=armhf --foreign $dist $rootdir
复制代码
#准备把chroot放到/mnt中
sudo cp /usr/bin/qemu-arm-static /mnt/usr/bin/

sudo cp /etc/resolv.conf /mnt/etc/
复制代码
# 把chroot放到/mnt中,然后安装debootstrap
sudo chroot /mnt

dist=wheezy

export LANG=C

/debootstrap/debootstrap –second-stage
复制代码
# 配置apt源
cat <<EOT > /etc/apt/sources.list

deb http://ftp.uk.debian.org/debian $dist main contrib non-free

deb-src http://ftp.uk.debian.org/debian $dist main contrib non-free

deb http://ftp.uk.debian.org/debian $dist-updates main contrib non-free

deb-src http://ftp.uk.debian.org/debian $dist-updates main contrib non-free

deb http://security.debian.org/debian-security $dist/updates main contrib non-free

deb-src http://security.debian.org/debian-security $dist/updates main contrib non-free

EOT

cat <<EOT > /etc/apt/apt.conf.d/71-no-recommends

APT::Install-Recommends "0";

APT::Install-Suggests "0";

EOT
复制代码
# 更新安装包然后将语系配置为en_US.UTF-8
apt-get update

dpkg-reconfigure locales
复制代码
# 在提示信息中均选择en_US.UTF-8 export LANG=en_US.UTF-8
# 安装一个ssh服务器使之可以通过网络安全登录, 并且可以自动设置日期和时间 (可选)
apt-get install openssh-server ntpdate
复制代码
# 更改root 密码
passwd
复制代码
# 查看/etc/ssh/sshd_config中以下选项并设置为yes: (注意,第一次登录的时候, 最好设置一个用户账户并通过设置选项为no禁用root权限)
vi /etc/ssh/sshd_config

PermitRootLogin yes
复制代码
# 更改banana pi的主机名 vi /etc/hostname
banana
复制代码
# 在/etc/dhcp/dhclient.conf 中,将下列行添加上或者取消注释以使banana识别lubuntu主机上的DHCP服务
vi /etc/dhcp/dhclient.conf

send host-name = gethostname();
复制代码
# 基于eth0进行自动dhcp连接
vi /etc/network/interfaces

auto lo eth0

iface lo inet loopback

allow-hotplug eth0

iface eth0 inet dhcp
复制代码
# 确保必要的时候串行控制台重新生成
echo T0:2345:respawn:/sbin/getty -L ttyS0 115200 vt100 >> /etc/inittab
复制代码
#在退出chroot之前终止ssh服务然后清除rootfs
/etc/init.d/ssh stop
复制代码
退出
sudo rm /mnt/usr/bin/qemu-arm-static /mnt/etc/resolv.conf
复制代码
d. 把kernel模块拷贝到rootfs
sudo mkdir -p /mnt/lib/moles

sudo rm -rf /mnt/lib/moles/

sudo cp -r linux-bananapi/output/lib/ /mnt/

sudo umount /mnt
复制代码
4. 给BananaPi供电
a. 连接banana pi
# 将banana pi的 usb/OTG 口连接到 lubuntu 主机的USB口或者直接利用适配器供电
# 在lubuntu主机和banana pi (ssh登录)之间连接以太网网线
# 最后在banana pi和lubuntu主机(控制台) 之间连接一个 USB-TTL 串行线
# 把SD卡插入Banana Pi
b. 给banana-pi供电
# 按下电源按钮
# 等待绿色LED灯闪烁 (几秒之后)
# 等待以太网接口启动(以太网连接器下的*LED灯)
c. 通过ssh登录

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com