在引導Linux開機之前需要先清楚Linux啟動的必要或者說是先決條件,這里就是提到了u-boot的作用了引用百度云---主要用于嵌入式系統的引導加載,其實在我調試下來總結一下就是初始化硬件這里的硬件包括必要部分和不必要的部分,比如SOC的時鐘,外部RAM(DDR內存),棧等。因為linux的內核相對于SOC內部的RAM而言還是比較龐大的,并且運行Linux的SOC的主頻普遍是比較高的,受限于flash的訪問速度,Linux肯定是不能像單片機的程序一樣放在片上flash運行的,畢竟在48M以上的時候常見的單片機都是需要加wait以匹配CPU和flash的速度差距了。所以u-boot一定的需要先初始化好RAM(DDR)然后將linux拷貝到RAM內來運行。所以Linux啟動的硬件環境和一些必須的軟件環境由u-boot負責配置好,最后也是u-boot將Linux內核放到DDR中最后把運行權交由Linux的代碼的。引導linux運行除了u-boot準備好的部分工作后剩下還有幾個分兩種情況。必須和設備樹配合的較新的內核版本和不需要設備樹的老內核。這兩種情況都需要根文件系統,設備樹則不一定。所以這里簡單記錄一下根文件系統的構建。
根文件件系統的構建
根文件系統是Linux啟動必須的,主要就是使用busybox進行配置和編譯后得到,除此之外如果不使用靜態連接的方式還需要交叉編譯工具的庫。首先下載busybox的源碼,然后解壓后開始配置。
1、添加編譯器
這里的套路和u-boot和linux的編譯之前相同就是修改頂層的makefile腳本的CORSS_COMOLIE為你自己的編譯工具,ARCH為你的目標架構。
2、增加中文支持這里參考開源電子網的修改
修改目錄libbb/printable_string.c文件
const char* FAST_FUNC printable_string(uni_stat_t *stats, const char
*str)
{
char *dst;
const char *s;
s = str;
while (1) {
......
if (c < ' ')
break;
/* 注釋掉下面這個兩行代碼 */
/* if (c >= 0x7f)
break; */
s++;
}
繼續修改/libbb/unicode.c
static char* FAST_FUNC unicode_conv_to_printable2(uni_stat_t*stats, const char *src, unsigned width, int flags)
{
char *dst;
unsigned dst_len;
unsigned uni_count;
unsigned uni_width;
if (unicode_status != UNICODE_ON) {
char *d;
if (flags & UNI_FLAG_PAD) {
d = dst = xmalloc(width + 1);
......
/* 修改下面一行代碼 */
/* *d++ = (c >= ' ' && c < 0x7f) ? c : '?'; */
*d++ = (c >= ' ') ? c : '?';
src++;
}
*d = ' 主站蜘蛛池模板: 湾仔区| 闽清县| 富蕴县| 囊谦县| 岑溪市| 德格县| 错那县| 东方市| 青浦区| 措美县| 东乌珠穆沁旗| 色达县| 汶上县| 双江| 襄汾县| 手游| 建德市| 昌乐县| 黑龙江省| 海南省| 读书| 新津县| 清丰县| 双鸭山市| 宾川县| 霍州市| 铅山县| 中牟县| 临桂县| 江津市| 洛南县| 台湾省| 张掖市| 白水县| 乌鲁木齐市| 祁东县| 荔浦县| 封丘县| 鹤峰县| 遂溪县| 资溪县|