충청북도 음성 출신으로 추정된다.
목종 때 중추원부사(中樞院副使)가 되었다. 1009년(목종 12) 왕이 병중에 있을 때, 김치양(金致陽)이 천추태후(千秋太后)와 사통해 얻은 아들을 왕위에 올리려는 역모를 꾸미자 왕명으로 중추원사(中樞院使) 최항(崔沆) 등과 함께 대량원군 왕순(大良院君 王詢: 뒤의 현종)을 영입하였다.
현종이 즉위하자 직중대(直中臺)가 되었고, 이어 이부시랑 겸 좌간의대부(吏部侍郎兼左諫議大夫)를 지냈다. 1011년(현종 2) 거란이 침입하자 왕을 호종해 나주로 피난했고, 거란이 퇴거한 뒤 비서감(祕書監)을 거쳐 중추사(中樞使)에 올랐다. 이듬해 예부상서(禮部尙書)·중추원사가 되고, 그 해 사신으로 거란에 다녀왔다.
1016년 예부상서 좌산기상시 중추사(禮部尙書左散騎常侍中樞使)를 거쳐 1018년 이부상서 참지정사(吏部尙書參知政事)에 올랐다. 이듬해 추충진절위사공신(推忠盡節衛社功臣)이 되고 제양현개국남(濟陽縣開國男)에 봉해졌다. 이 때 왕에게 아뢰어 부모의 나이가 80 이상이 된 군사는 병역을 면하여 취양(就養)하게 하고, 부모의 나이가 70이 넘고 다른 형제가 없는 문무관은 외직에 보(補)하지 말 것이며, 그 부모에게 병이 있으면 200일의 휴가를 주어 보살피게 하였다.
1021년 검교태위(檢校太尉)에 올라 제양현개국자(濟陽縣開國子)에 봉해지고, 보국공신(輔國功臣)이 더해졌다. 1022년 내사시랑평장사 겸 서경유수(內史侍郎平章事兼西京留守)가 되고, 이듬해 태자소사(太子少師), 1025년 판상서예부사(判尙書禮部事)를 역임하였다.
1027년 문하시랑평장사(門下侍郎平章事)에 승진되었으며, 1030년 판서경유수사(判西京留守事)가 되었다가 이듬해 병으로 치사(致仕)하였다. 글씨에도 일가를 이루었으며, 시호는 정간(貞簡)이다.