2020年2月

1.修改内核配置选项
进入内核源码目录linux-2.6.32.2目录

cp config_mini2440_x35 .config

make menuconfig ARCH=arm

(1).打开配置菜单,修改两个配置项,分别是:
a):General setup-->选择 Initial RAM filesystem and RAM disk...... 项
b):Device Drivers-->Block devices-->选择 RAM block device support 项

c):并检查Optimize for size是否被选中,如果没有则选中,此项优化内核大小,根据需要进行配置。
d):device driver->block device里的一个选项,‍Default Ramdisk 设置ramdisk的大小.16384

Note:修改(8192)Default RAM disk size kbytes选项为(4096)Default RAM disk size kbytes, 之所以修改是因为我之后制作的ramdisk是4096KB大小的。当然如果你想制作8192KB大小的ramdisk,这里就要对应为8192了,以此 类推。但是最小系统嘛,是不用那么大的ramdisk的。此项的默认配置就是(4096),以前我改过这个配置,所以是(8192)了。如果这个大小和你 做的ramdisk不匹配,则启动时仍然会出现kernel panic内核恐慌,提示ramdisk格式不正确,挂载不上ramdisk。

(2).进入File systems菜单,选上<*> Second extended fs support
ramdisk是一种内存虚拟磁盘技术,实质上并不是一种文件系统,它使用的文件系统时ext2文件系统。
这样就为内核添加好了ramdisk启动功能和ramdisk的驱动支持了。

2.修改内核启动参数
方法有二:
a):修改.config的第310行,修改CONFIG_CMDLINE=""的定义
修改为CONFIG_CMDLINE="initrd=0x31000000,0x400000 root=/dev/ram0 rw init=/linuxrc console=ttySAC0 mem=64M"
保存。
意思为从ramdisk启动,ramdisk压缩文件起始地址在内存地址0x31000000处,文件大小为0x400000。
此参数也可以在make menuconfig ARCH=arm时进入Boot options菜单,然后在Default kernel command string里修改。效果是一样的

b):或者不修改.config的的第310行CMDLINE定义,而是用u-boot的bootargs环境变量来传递启动参数。
同样也是修改该环境变量为bootargs=initrd=0x31000000,0x400000 root=/dev/ram0 rw init=/linuxrc console=ttySAC0 mem=64M
并saveenv保存u-boot环境变量
以上a),b)的效果是一样的。

4.编译内核

make zImage ARCH=arm CROSS_COMPILE=arm-linux-

编译完成后在当前目录下就出现了zImage内核映像了。

5.其实 uImage就是在zImage的开头部分增加了一个64字节的内核映像说明。说明一下:zImage是ARM Linux常用的一种压缩映像文件,uImage是U-boot专用的映像文件,它是在zImage之前加上一个长度为0x40的“头”,说明这个映像文 件的类型、加载位置、生成时间、大小等信息。换句话说,如果直接从uImage的0x40位置开始执行,zImage和uImage没有任何区别。另 外,Linux2.4内核不支持uImage,Linux2.6内核加入了很多对嵌入式系统的支持,但是uImage的生成也需要设置。

5.制作uImage内核映像
由于使用的Bootloader是u-boot,所以要将zImage转化为uImage,方法如下:
1.把zImage 拷到uboot 的tools 目录下

  1. ./mkimage -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008040 -n "Linux kernel Image" -d zImage uImage-ramdisk

说明:mkimage工具是u-boot格式uImage内核映像制作工具。如果成功编译u-boot之后,它会在u-boot源码树下的tools目录 之下。建议将其拷贝到宿主机的/sbin/目录下,以方便使用。

6.还有一个是启动到最后面,会提示

RAMDISK: Compressed image found at block 0
RAMDISK: incomplete write (2270 != 32768)

之类,这问题就是上面说的内核配置的ramdisk大小不对,要去修改一下内核配置
我将它修改成12288(1024的整数倍)

Git SSH keys

SSH key 可以让你在你的电脑和Code服务器之间建立安全的加密连接。 先执行以下语句来判断是否已经存在本地公钥:

cat ~/.ssh/id_rsa.pub

如果你看到一长串以 ssh-rsa或 ssh-dsa开头的字符串, 你可以跳过 ssh-keygen的步骤。

提示: 最好的情况是一个密码对应一个ssh key,但是那不是必须的。你完全可以跳过创建密码这个步骤。请记住设置的密码并不能被修改或获取。

你可以按如下命令来生成ssh key:

ssh-keygen -t rsa -C "iron@example.com"

这个指令会要求你提供一个位置和文件名去存放键值对和密码,你可以点击Enter键去使用默认值。

用以下命令获取你生成的公钥:

cat ~/.ssh/id_rsa.pub

复制这个公钥放到你的个人设置中的SSH/My SSH Keys下,请完整拷贝从ssh-开始直到你的用户名和主机名为止的内容。

如果打算拷贝你的公钥到你的粘贴板下,请参考你的操作系统使用以下的命令:

Windows:

clip < ~/.ssh/id_rsa.pub

Mac:

pbcopy < ~/.ssh/id_rsa.pub

GNU/Linux (requires xclip):

xclip -sel clip < ~/.ssh/id_rsa.pub

Applications
Eclipse

如何在Eclipse中添加ssh key: https://wiki.eclipse.org/EGit/User_Guide#Eclipse_SSH_Configuration
Tip: Non-default OpenSSH key file names or locations

如果,不管你有什么理由,当你决定去用一个非默认的位置或文件名去存放你的ssh key。你必须配置好你的ssh客户端以找到你的ssh私钥去连接Code服务器,对于OpenSSH客户端,这个通常是在~/.ssh/config类似的位置配置的:

#
# Our company's internal GitLab server
#
Host my-git.company.com
RSAAuthentication yes
IdentityFile ~/my-ssh-key-directory/company-com-private-key-filename

Docker Community Edition 镜像使用帮助

注意: 本镜像只提供 Debian/Ubuntu/Fedora/CentOS/RHEL 的 docker 软件包,非 dockerhub
Debian/Ubuntu 用户

以下内容根据 官方文档 修改而来。

如果你过去安装过 docker,先删掉:

sudo apt-get remove docker docker-engine docker.io

首先安装依赖:

sudo apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common

根据你的发行版,下面的内容有所不同。你使用的发行版:

信任 Docker 的 GPG 公钥:

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -

对于 amd64 架构的计算机,添加软件仓库:

sudo add-apt-repository \
"deb [arch=amd64] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian \
$(lsb_release -cs) \
stable"

如果你是树莓派或其它ARM架构计算机,请运行:

echo "deb [arch=armhf] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian \

 $(lsb_release -cs) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list

最后安装

sudo apt-get update
sudo apt-get install docker-ce

Fedora/CentOS/RHEL

以下内容根据 官方文档 修改而来。

如果你之前安装过 docker,请先删掉

sudo yum remove docker docker-common docker-selinux docker-engine

安装一些依赖

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

根据你的发行版下载repo文件:

wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo

把软件仓库地址替换为 TUNA:

sudo sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo

最后安装:

sudo yum makecache fast
sudo yum install docker-ce

https://wiki.gentoo.org/wiki/OpenRC

Features

OpenRC provides a number of features touted as innovative by recent init systems like systemd or [upstart], such as:

cgroups support,
process supervision,
parallel startup of services, and
hardware initiated initscripts run.

It does this without requiring large layout changes to accommodate radically different designs and dependencies.
Tip
See the comparison of init systems article for more information on init systems.
OpenRC Busybox integration

Busybox can be used to replace most of the userspace utilities needed by OpenRC (init, shell, awk and other POSIX tools), by using a complete Busybox as shell for OpenRC all the calls that normally would cause a fork/exec would be spared, improving the overall speed. This process is not yet streamlined.

Please note that there are currently many Busybox applets that are incompatible with OpenRC. See bug #529086 for details.
Replacing init

In order to set a specific runlevel from the bootloader the variable softlevel= should be used.
busybox

The SysV-init /etc/inittab file provided by Gentoo is not compatible with the Busybox init.
FILE /etc/inittabExample inittab compatible with Busybox init

::sysinit:/sbin/openrc sysinit
::wait:/sbin/openrc boot
::wait:/sbin/openrc

openrc-init

OpenRC has its own init system called openrc-init. See OpenRC/openrc-init for details.

https://superuser.com/questions/1290314/what-is-modloop-option-in-alpine

Ask Question
Asked 2 years ago
Active 1 year, 10 months ago
Viewed 2k times

3

I'm trying to understand what is the difference of making Alpine installation medium as read-only type (LiveCD) and as a standard disk mode (where the OS state can be saved). I've seen the modloop option when the author of this article (https://wiki.alpinelinux.org/wiki/Create_UEFI_boot_USB) configured loader entries for UEFI boot mode:

Contents of loader/entries/alpine.conf
title Alpine Linux
linux /boot/vmlinuz-hardened
initrd /boot/initramfs-hardened
options modloop=/boot/modloop-hardened modules=loop,squashfs,sd-mod,usb-storage quiet
And the question is how options listed in this stanza modloop=/boot/modloop-hardened modules=loop,squashfs,sd-mod are related to each other and what do they mean?

linux boot linux-kernel kernel-module alpine-linux
shareimprove this question
asked Jan 30 '18 at 13:19

Timur Fayzrakhmanov
13166 bronze badges
1
Did you check whenever there is a man page available from within alpine for modloop? – Seth Jan 30 '18 at 13:40
1
Yes I did. After installing man man-pages I tried to grep-ing "modloop" within the whole man pages. As you might guess man modloop gives nothing as well. – Timur Fayzrakhmanov Jan 31 '18 at 9:48
add a comment
1 Answer
activeoldestvotes

4

The modloop= option specifies a SquashFS filesystem that gets mounted to /.modloop by the init file /etc/init.d/modloop and symlinked from /lib/modules (or possibly union-mounted with the overlay - see the modloop init script for details). It contains the full kernel module tree for the built kernel, not the more limited set included in the initramfs / initrd.

You might find these helpful to explore:

unsquashfs -l /boot/modloop-hardened (to explore what will get mounted to /.modloop)
gzip -dc /boot/initramfs-hardened | cpio -it (to explore the initramfs contents)
shareimprove this answer