1. BootLoader基本原理
由于BootLoader的实现依赖于CPU的体系结构,因此大多数BootLoader都分为stage1和stage2两大部分。依赖于CPU体系结构的代码,如设备初始化代码等,通常都放在stage1中,而且通常都用汇编语言来实现,以达到短小精悍的目的;而stage2则通常用C语言实现,这样可以实现更复杂的功能,而且代码会具有更好的可读性和可移植性。
BootLoader的stage1通常包括以下步骤(以执行的先后顺序):
(1)硬件设备初始化。
(2)为加载BootLoader的stage2准备RAM空间。
(3)复制BootLoader的stage2到RAM空间
(4)设置好堆栈。
(5)跳转到stage2的C入口点。
BootLoader的stage2通常包括以下步骤(以执行的先后顺序):
(1)初始化本阶段要使用到的硬件设备。
(2)检测系统内存映射(memory map)。
(3)将kernel映像和根文件系统映像从Flash上读到RAM空间从。
(4)为内核设置启动参数。
(5)调用内核。
2. Linux内核的主要子系统
(1)进程调度(/linux/kernel, /linux/arch)
在内核从进程称为线程,代表了单独的处理器虚拟化(线程代码、数据、堆栈和CPU寄存器)。在用户空间,通常使用进程这个术语,不过Linux实际并没区分这两个概念(进程和线程)。内核实现了一种O(1)的调度算法,因此调度多个线程所使用的时间和调度一个线程相同。
config VT6656
tristate "VIA Technologies VT6656 support"
depends on USB && MAC80211
select WIRELESS_EXT
select WEXT_PRIV
---help---
This is a vendor-written driver for VIA VT6656.
edit$(KSRC)/drivers/net/wireless/Makefile
------------------------------------
obj-$(CONFIG_VT6656) += VT6656/
------------------------------------
edit $(KSRC)/drivers/net/ Makefile
------------------------------------
obj-$(CONFIG_VT6656) += wireless/
------------------------------------
edit$(KSRC)/drivers/net/wireless/VT6656/Makefile
------------------------------------
obj-$(CONFIG_VT6656) += vntwusb.ko
------------------------------------
然后是make menuconfig,具体请参考mini2440用户手册
make
make zImage
之后可以在$(KSRC)/drivers/net/wireless/VT6656中找到vntwusb.ko
5.2直接用make命令
在$(KSRC)目录
$cp config_mini6410_a70 .config && make oldconfig && make prepare && make modules_prepare
转到vt6656目录
make -C $(KSRC) M=`pwd` modules
在vt6656目录找到
6. 修改开发板默认ip地址
涉及到两个文件
有/etc/eth0-setting,设置成如下(修改为自己需要的):
IP=192.168.1.23
Mask=255.255.255.0
Gateway=192.168.1.1
DNS=192.168.1.1
/etc/init.d/rcS, 找到如下一行
/sbin/ifconfig eth0 192.168.1.23 netmask 255.255.255.0 up
将ip修改为自己需要的。
7.
在Linux中,modprobe和insmod都可以用来加载module,不过现在一般都推荐使用modprobe而不是insmod了。
modprobe和insmod的区别是什么呢?
1.modprobe可以解决load module时的依赖关系,比如load moudleA就必须先load mouduleB之类的,它是通过/lib/modules//modules.dep文件来查找依赖关系的。而insmod不能解决依赖问题。
2.modprobe默认会去/lib/modules//下面查找module,而insmod只在给它的参数中去找module(默认在当前目录找)。这样,有时insmod也有它的有用之处,举个例子吧。
有/root/my-mod.ko这个module,cd /root/,然后用insmod my-mod.ko(insmod /root/my-mod.ko)就可以insert这个module了,但是用modprobe my-mod.ko(modprobe /root/my-mod.ko)却提示"FATAL: Module my-mod.ko not found",这就是因为modprobe是到/lib/modules/`uname -r`/下去找module的,如果没找到就是这样了。
Mask=255.255.255.0
Gateway=192.168.1.1
DNS=192.168.1.1
modprobe和insmod的区别是什么呢?
1.modprobe可以解决load module时的依赖关系,比如load moudleA就必须先load mouduleB之类的,它是通过/lib/modules//modules.dep文件来查找依赖关系的。而insmod不能解决依赖问题。
2.modprobe默认会去/lib/modules//下面查找module,而insmod只在给它的参数中去找module(默认在当前目录找)。这样,有时insmod也有它的有用之处,举个例子吧。
有/root/my-mod.ko这个module,cd /root/,然后用insmod my-mod.ko(insmod /root/my-mod.ko)就可以insert这个module了,但是用modprobe my-mod.ko(modprobe /root/my-mod.ko)却提示"FATAL: Module my-mod.ko not found",这就是因为modprobe是到/lib/modules/`uname -r`/下去找module的,如果没找到就是这样了。