=========================        基本常识       =========================

一、 Linux系统的基本构成:

1、 loader

2、 kernel

3、 filesystem

二、 启动步骤:

1、 CPU从ROM(如果有的话)的0x0地址开始读取代码,执行loader;

2、 Loader初始化ram,并从rom中拷贝uboot或kernel的镜像到ram的指定地址,执行镜像;

3、 如果有uboot,则uboot执行启动前的设置,可以初始化部分硬件,可以手动进入uboot环境,等等,最后拷贝kernel的镜像到ram的指定地址;如果没有uboot,那么跳过这一步;

4、 前面的步骤称为loader部分。Kernel被加载到ram后,kernel的bootargs会被覆盖,kernel启动;

5、 加载驱动程序;

6、 加载文件系统,读取并执行/etc/inittab.

三、 交叉编译器:

arm-linux-gnueabihf-gcc

四、 Makefile文件和make的使用

(太容易了,,,,另行说明)

=========================        移植系统       =========================

一、 交叉编译器的配置:

修改 ~/.bashrc:

export PATH=/home/hexh/toolchain/hfcctool/bin:$PATH  #shell任意目录下均可执行gcc

export CROSS_COMPILE=arm-linux-gnueabihf-   # 编译loader、kernel所需要的一个变量

重启下shell,或者source ~/.bashrc

二、 编译loader和内核:

1、 公司一般基于开发板修改得到自己的产品,因此第一次编译要严格参照官方资料(这个资料都没有,或者编不过,那就是扯蛋了),熟悉后可自行修改源码;

2、 内核配置命令:make ARCH=arm menuconfig;

三、 最简易的文件系统:

1、 编译busybox

执行 make menuconfig

(1) 修改Build Options --> Cross Compiler prefix

(2) 菜鸟必须选中Build Options --> no shared libs

(3) 修改 Installation Options ("make install" behavior) à BusyBox installation prefix 为../target,将会在工程目录的target下生成最小根文件系统;

make && make install

进入target目录,补齐文件系统的文件夹,标黄的部分必须确保存在:

bin  etc   lib      mnt  proc  run   sys  usr

dev  home  linuxrc  opt  root  sbin  tmp  var

/bin  /sbin  /usr, 这几个文件夹已经被busybox配置过了,不需要自行添加东西,/etc目录需要包含所有的配置信息,busybox没有对这个文件夹进行处理,需要自行定制。

2、 /etc/inittab

该文件配置系统启动的默认动作,如果该文件无法读取,会导致kernel panic

在busybox中,和PC机略有不同,文件格式:

输出设备::运行等级:命令

常用运行等级:sysinit(开机自启动项)   respawn(保持运行)

例:

# 初始化根文件系统

null::sysinit:/bin/mkdir -p /dev/pts

null::sysinit:/bin/mkdir -p /dev/shm

null::sysinit:/bin/mount –a

# 初始化hostname(需要在/etc/hostname文件中存入机器名称)

null::sysinit:/bin/hostname -F /etc/hostname

# 执行启动脚本(可自由订制)

::sysinit:/etc/init.d/rcS

# 在串口0开放登录,并自动登录root(无密码的情况下)

ttyS0::respawn:/bin/login -f root

3、 /etc/fstab

命令 mount –a 需要使用的文件,在init初始化工作结束前,需要在/proc /tmp /sys /dev 创建对应的文件系统

内容:

proc    /proc   proc    defaults                0       0

tmpfs   /tmp    tmpfs   defaults                0       0

sysfs   /sys    sysfs   defaults                0       0

tmpfs   /dev    tmpfs   defaults                0       0

4、 /etc/passwd 和 /etc/shadow

这两个文件为账户数据,对inittab中的工作不重要,但登入用户环境有利于调试工作,设置密码也能有效阻止外部破解产品的途径。

这两个文件每行的第二段数据决定

例:Root用户无密码的配置

[root@A5 /etc]# cat passwd

root:x:0:0:root:/mnt/root:/bin/sh

[root@A5 /etc]# cat shadow

root::10933:0:99999:7:::

5、 /etc/profile

Profile这个脚本会在用户登录的时候自动执行,对inittab阶段不会产生影响。

内容:

# 初始化shell

USER="$(id -un)"

LOGNAME=$USER

PS1='[\u@\h \w]# '

PATH=$PATH:/mnt/bin:/mnt/usr/bin:/mnt/sbin:/mnt/usr/sbin

HOSTNAME='/bin/hostname'

export USER LOGNAME PS1 PATH LD_LIBRARY_PATH

四、 文件系统镜像的制作:

在此会介绍4种文件系统镜像的制作方法:fat   ext4   cramfs   ubifs

1、 格式化工具 fdisk

例:格式化U盘 --> fdisk /dev/sdb

常用命令:

m:帮助;

p:打印分区列表;

n:新建分区;

t:修改分区格式(但不格式化);

a:设置可启动分区;

2、 Fat格式制作方法(在sd卡上运行系统)

例:格式化u盘 à mkfs.vfat /dev/sdb1

3、 Ext4格式制作方法(在sd卡上运行系统)

例:格式化u盘 à mkfs.ext4 /dev/sdb1

4、 Cramfs制作方法(启动镜像)

例:mkfs.cramfs -b 4096 -N little ${SOURCE} ${IMAGE}

5、 Ubifs制作方法

需要使用两个工具:mkfs.ubifs  ubinize

先用mkfs.ubifs将根文件目录制作成ubifs文件系统,再用ubinize将ubifs文件系统制作成ubi镜像;

例:

mkfs.ubifs -r ${SRC} -e 0x1f000 -c 2048 -m 0x800 -o rootfs.ubifs

ubinize -o rootfs.ubi -m 0x800 -p 0x20000 -s 2048 ubinize.cfg

ubinize.cfg的内容:

[ubifs]

mode=ubi

image=rootfs.ubifs

vol_id=0

vol_type=dynamic

vol_name=rootfs

vol_alignment=1

vol_flags=autoresize

Linux系统在嵌入式硬件上的移植的更多相关文章

  1. FFMPEG在嵌入式硬件上应用之 —— 基本环境搭建及编译

    前段时间在翻看电脑里面资料时,发现了以前做的在嵌入式硬件上面运行以ffmepg为基础,以嵌入式硬件解码的多媒体播放工作,发现都快忘记完了.今日得闲整理温习了一下ffmpeg在嵌入式上的运用,这里给大家 ...

  2. linux系统相关、硬件、资源 - 相关命令

    分类命令:   1.1.系统 # uname -a                    # 查看内核/操作系统/CPU信息# head -n 1 /etc/issue   # 查看操作系统版本 #  ...

  3. Linux系统中的硬件问题如何排查?(6)

    Linux系统中的硬件问题如何排查?(6) 2013-03-27 10:32 核子可乐译 51CTO.com 字号:T | T 在Linux系统中,对于硬件故障问题的排查可能是计算机管理领域最棘手的工 ...

  4. Linux系统中的硬件问题如何排查?(5)

    Linux系统中的硬件问题如何排查?(5) 2013-03-27 10:32 核子可乐译 51CTO.com 字号:T | T 在Linux系统中,对于硬件故障问题的排查可能是计算机管理领域最棘手的工 ...

  5. Linux系统中的硬件问题如何排查?(4)

    Linux系统中的硬件问题如何排查?(4) 2013-03-27 10:32 核子可乐译 51CTO.com 字号:T | T 在Linux系统中,对于硬件故障问题的排查可能是计算机管理领域最棘手的工 ...

  6. Linux系统中的硬件问题如何排查?(3)

    Linux系统中的硬件问题如何排查?(3) 2013-03-27 10:32 核子可乐译 51CTO.com 字号:T | T 在Linux系统中,对于硬件故障问题的排查可能是计算机管理领域最棘手的工 ...

  7. Linux系统中的硬件问题如何排查?(2)

    Linux系统中的硬件问题如何排查?(2) 2013-03-27 10:32 核子可乐译 51CTO.com 字号:T | T 在Linux系统中,对于硬件故障问题的排查可能是计算机管理领域最棘手的工 ...

  8. Linux 系统时钟(date) 硬件时钟(hwclock)

    /********************************************************************* * Linux 系统时钟(date) 硬件时钟(hwclo ...

  9. Linux运维面试题:请简要说明Linux系统在目标板上的启动过程?

    Linux运维面试题:请简要说明Linux系统在目标板上的启动过程? 该问题是Linux运维面试最常见的问题之一,问题答案如下: 1.用户打开PC的电源,BIOS开机自检,按BIOS中设置的启动设备( ...

随机推荐

  1. header('Content-type:text/html;charset = utf-8');出现中文乱码

    header('Content-type:text/html;charset = utf-8'); "="两旁不能留空格,必须紧密连写,否则出现乱码;

  2. Linux Shell入门(转载)

    From:http://www.cnblogs.com/suyang/archive/2008/05/18/1201990.html 从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用 ...

  3. wall 和panel有啥区别

    Panel指的是一个面板,用它来对一些控件进行分组,就像组合框控件,即Visual Studio里面用的Group Box Control:而在一些软件界面里面也可以表现为工具条,比如编辑工具条.文件 ...

  4. mysql如何给汉字按照首字母顺序排序

    select * from 表名 order by convert(列明 USING gbk) COLLATE gbk_chinese_ci asc

  5. python datetime时区转换

    from pytz import timezone def datetime_as_timezone(date_time, time_zone): tz = timezone(time_zone) u ...

  6. NYOJ 55-懒省事的小明

    点击打开链接 懒省事的小明 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述       小明很想吃果子,正好果园果子熟了.在果园里,小明已经将所有的果子打了下来,而且按果 ...

  7. CDN和DNS

    相信有很多的朋友会被这几个名词绕的有些头大,很多朋友觉得智能DNS跟双线加速.CDN加速是类似的技术.其实不然,虽然他们的目的都是一个:让用户更快的访问网站.但是他们的应用原理却大相径庭.大家一定很清 ...

  8. 安装和卸载windows程序

    安装windows service通常有两种工具 1.Framework目录下的installutil.exe工具.2.visual studio命令行工具 在这里我要说的是当我们使用的系统是64位的 ...

  9. JavaScript对象的创建之外部属性定义方式(基于已有对象扩充其属性和方法)

    var person = new Object(); person.name = "luogk"; person.age = 33; person.say = function() ...

  10. java中好玩的案例

    1:实现猜数字游戏, 如果没有猜对可以继续输入你猜的数字,如果猜对了停止程序. 最多只能猜三次,如果还剩下最后一次机会的时候要提醒用户. 代码: Random random = new Random( ...