基本上相當簡單,照底下的做就行了....
- cd $ANDROID/external/
- git clone https://github.com/CyanogenMod/android_external_busybox.git --branch ics
- cd android_external_busybox
- mm
若比對 gingerbread 與 ics 的差異...
- Android.mk: BIONIC_ICS := false --> BIONIC_ICS := true
- networking/nslookup.c: # define _res _nres --> # define _res (*__res_get_state())
這個變動若您在 android 需要寫程式對 dns 有需求的話,可能會遇到問題,請見這篇 - util-linux/dmesg.c: 加了底下這些,不影響大局:
diff -ruN busybox-gingerbread//util-linux/dmesg.c busybox-ics/util-linux/dmesg.c --- busybox-gingerbread//util-linux/dmesg.c 2012-01-19 17:23:20.415785436 +0800 +++ busybox-ics/util-linux/dmesg.c 2012-01-19 17:10:43.165785088 +0800 @@ -10,16 +10,24 @@ */ //usage:#define dmesg_trivial_usage -//usage: "[-c] [-n LEVEL] [-s SIZE]" +//usage: "[-c] [-n LEVEL] [-r] [-s SIZE] [-C]" //usage:#define dmesg_full_usage "\n\n" //usage: "Print or control the kernel ring buffer\n" //usage: "\n -c Clear ring buffer after printing" //usage: "\n -n LEVEL Set console logging level" +//usage: "\n -r Show level prefix" //usage: "\n -s SIZE Buffer size" +//usage: "\n -C Colored output" #include
#include "libbb.h" +#define COLOR_DEFAULT 0 +#define COLOR_WHITE 231 +#define COLOR_YELLOW 226 +#define COLOR_ORANGE 166 +#define COLOR_RED 196 + int dmesg_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; int dmesg_main(int argc UNUSED_PARAM, char **argv) { @@ -29,11 +37,13 @@ enum { OPT_c = 1 << 0, OPT_s = 1 << 1, - OPT_n = 1 << 2 + OPT_n = 1 << 2, + OPT_r = 1 << 3, + OPT_C = 1 << 4 }; opt_complementary = "s+:n+"; /* numeric */ - opts = getopt32(argv, "cs:n:", &len, &level); + opts = getopt32(argv, "cs:n:rC", &len, &level); if (opts & OPT_n) { if (klogctl(8, NULL, (long) level)) bb_perror_msg_and_die("klogctl"); @@ -55,13 +65,37 @@ return EXIT_SUCCESS; - if (ENABLE_FEATURE_DMESG_PRETTY) { + if ((ENABLE_FEATURE_DMESG_PRETTY || (opts & OPT_C)) && !(opts & OPT_r)) { int last = '\n'; - int in = 0; + int in = 0, l, color; + char pfx[16], *lvl; /* Skip <#> at the start of lines */ while (1) { if (last == '\n' && buf[in] == '<') { + if (opts & OPT_C) { + lvl = buf + in + 1; + sscanf(lvl, "%d", &level); + + switch (level) { + case 1: + case 2: + case 3: color = COLOR_RED; break; + case 4: color = COLOR_ORANGE; break; + case 5: color = COLOR_YELLOW; break; + case 7: color = COLOR_WHITE; break; + case 6: // common dmesg info + default: color = COLOR_DEFAULT; + } + + if (color != COLOR_DEFAULT) + l = sprintf(pfx, "%c[%d;%d;%dm", + 0x1B, 38, 5, color); + else + l = sprintf(pfx, "%c[%dm", 0x1B, 0); + + full_write(STDOUT_FILENO, pfx, l); + } in += 3; if (in >= len) break; @@ -72,9 +106,17 @@ if (in >= len) break; } + + if (opts & OPT_C) { + /* Reset default terminal color */ + l = sprintf(pfx, "%c[%dm", 0x1B, 0); + full_write(STDOUT_FILENO, pfx, l); + } + /* Make sure we end with a newline */ if (last != '\n') bb_putchar('\n'); + } else { full_write(STDOUT_FILENO, buf, len); if (buf[len-1] != '\n')
0 意見:
張貼留言