自己編譯的內核進行修改後為後續方便查詢是那個版本的系統。 所以每次更改內核後都需要修改一下版本信息, 又因為內核一般是不變的為了區分所以增加到擴展版本上。 操作環境: 硬體是全志 V3S Linux內核是3.4 修改的方法: 方法一: 一個在menuconfig中進行增加 打開menuconfig ...
自己編譯的內核進行修改後為後續方便查詢是那個版本的系統。
所以每次更改內核後都需要修改一下版本信息,
又因為內核一般是不變的為了區分所以增加到擴展版本上。
操作環境:
硬體是全志 V3S
Linux內核是3.4
修改的方法:
方法一:
一個在menuconfig中進行增加
打開menuconfig
cd linux-3.4
sudo make ARCH=arm CROSS_COMPILE=arm-buildroot-Linux-gnueabihf- menuconfig
General setup
(-v1.1)Locl version - append to kernel release //在括弧中輸入要增加的擴展信息
方法二:
打開內核跟目錄下的Makefile
在 4 EXTRAVERSION 後增加
sudo vi Makefile
4 EXTRAVERSION = -v1.1
重新編譯生成系統。
查看系統版本的方法
uname -r
得到 3.4.39-v1.1
也可以執行
uname -a
cat /proc/version
c 程式獲取增加版本信息的代碼
read_version.c
#include<stdio.h> #include<stdlib.h> #include<string.h> #include <sys/time.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/ioctl.h> #include <fcntl.h> #include <unistd.h> #include <termios.h> #include <errno.h> #include <signal.h> #include <stdbool.h> #define VERSION_DEV "/proc/version" #define MAX_BUF 2048 int read_version(char * dev,char *buf) { int fp =0; int ret =-1; char buff[512]={0}; int len =0; char *pos =NULL; char *endpos =NULL; if((dev == NULL) || (buf == NULL)){ printf("%s:input arg error\n",__FUNCTION__); return -1; } fp = open(dev,O_RDONLY); if(fp == -1){ printf("open dev failed\n"); ret = fp; goto err0; } ret = read(fp,buff,512); if(ret < 0) { printf("Read error\n"); goto err1; } // printf("ret=%d:%s",ret,buff); pos = strstr(buff,"-v"); //printf("pos=%x",pos); if(pos == NULL) goto err1; else{ endpos = strchr(pos,' '); // printf("endpos=%x",endpos); if(endpos != NULL){ ret = endpos - pos -1; memcpy(buf,pos+1,ret); } } err1: close(fp); err0: return ret; } int main(int argc,char const * argv[]) { int fd,n=0,ret =-1; char buf[MAX_BUF]={0}; while(1){ memset(buf,0,sizeof(buf)); n = read_version(VERSION_DEV,buf); if(n > 0) { printf("++++++++++++len=%d:%s\n",n,buf); } else { printf("read n= %d\n",n); } sleep(1); } return 0; }
遇到的問題:
載入顯示屏驅動模塊時報錯
modprobe fbtft_device name=lh133t gpios="reset:145,dc:144" busnum=0
報錯
modprobe: FATAL: Module fbtft_device not found in directory /lib/modules/3.4.39-v1.1
後分析發現問題是/lib/modules/3.4.39-v1.1 沒有對應的modules.dep依賴文件
需要需執行depmod 更新生成一下modules.dep
在rcS增加depmod命令
v3ssdk/rootfs/etc/init.d sudo vi rcS
最上面增加depmod
此外發現每次更新版本名稱後重新編譯系統,/lib/modules 下就會編譯生成一個新的文件。系統鏡像會變大,
建議就留下3.4.39 和新生成的文件夾,其他的刪掉
easyboard@V3S:~/corelinux/v3ssdk/rootfs/lib/modules$ ls
3.4.39 3.4.39-01 3.4.39v1.1 3.4.39V1.1
修改內核版本的弊端。
在實際修改其他項目的時候發現,
當內核版本修改後,採用insmod 插入模塊都會因為版本和編譯時候的版本不一致而報錯。
導致修改內核版本後,所以的模塊驅動都需要重新編譯一次,這是很難受的,最終在項目中,我們是
增加一個config.ini文件單獨記錄系統修改的版本號。無奈。。。。。